我正在寻找一种简单的方法来查询格式为YYYYMMDD的字符串类型的数据库列。这可以通过以下本机查询来完成:
select * from TPRODUCT where to_date(ENDOFPRODUCTION, 'YYYYMMDD') > CURRENT_DATE;
但有没有办法与AttributeConverter
@NamedQuery(name = "product.filterByEOP", query =
"select p from Product p where p.eop > :currentDate")
答案 0 :(得分:1)
嗯,事实证明你可以。如果其他人正在研究这个问题,在检查the reference之后我最终得到了:
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;
}
}
然后可以在实体属性上使用:
@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();
答案 1 :(得分:0)
为什么你不把你的String转换成日期并像以前一样使用它:
String myDate = "20170607";
DateFormat format = new SimpleDateFormat("YYYYMMDD");
Date newDate = format.parse(myDate);
现在你可以使用:
query.setParameter("currentDate", newDate);