JPA AttributeConverter比较?

时间:2017-06-07 11:07:26

标签: java oracle hibernate jpa date-format

我正在寻找一种简单的方法来查询格式为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")

2 个答案:

答案 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);