Java JPA属性转换器比较?
我正在寻找一种以YYYYMMDD格式查询字符串类型的数据库列的简单方法。这可以通过本机查询完成,如:Java JPA属性转换器比较?,java,oracle,hibernate,jpa,date-format,Java,Oracle,Hibernate,Jpa,Date Format,我正在寻找一种以YYYYMMDD格式查询字符串类型的数据库列的简单方法。这可以通过本机查询完成,如: select * from TPRODUCT where to_date(ENDOFPRODUCTION, 'YYYYMMDD') > CURRENT_DATE; 但是有没有一种方法可以通过AttributeConverter实现这种比较呢 为什么不将字符串转换为日期,然后像现在这样使用最后一个: String myDate = "20170607"; DateFormat format
select * from TPRODUCT where to_date(ENDOFPRODUCTION, 'YYYYMMDD') > CURRENT_DATE;
但是有没有一种方法可以通过AttributeConverter实现这种比较呢
为什么不将字符串转换为日期,然后像现在这样使用最后一个:
String myDate = "20170607";
DateFormat format = new SimpleDateFormat("YYYYMMDD");
Date newDate = format.parse(myDate);
现在您可以使用:
query.setParameter("currentDate", newDate);
事实证明你可以。如果其他人正在调查此事,在检查后,我得出以下结论:
public class DateConverter implements AttributeConverter<Date, String> {
private final String DATE_FORMAT = "YYYYMMDD";
@Override
public String convertToDatabaseColumn(Date date) {
return new SimpleDateFormat(DATE_FORMAT).format(date);
}
@Override
public Date convertToEntityAttribute(String dateString) {
Date converted = null;
try {
converted = new SimpleDateFormat(DATE_FORMAT).parse(dateString);
} catch (ParseException ex) {
}
return converted;
}
}
并使用以下查询:
final TypedQuery<Product> query = this.entityManager.createNamedQuery("product.filterByEOP", Product.class);
query.setParameter("currentDate", new Date());
List<Product> models = query.getResultList();
@Column(name = "ENDOFPRODUCTION")
@Convert(converter = DateConverter.class)
private Date eop;
final TypedQuery<Product> query = this.entityManager.createNamedQuery("product.filterByEOP", Product.class);
query.setParameter("currentDate", new Date());
List<Product> models = query.getResultList();