Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA属性转换器比较?_Java_Oracle_Hibernate_Jpa_Date Format - Fatal编程技术网

Java JPA属性转换器比较?

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

我正在寻找一种以YYYYMMDD格式查询字符串类型的数据库列的简单方法。这可以通过本机查询完成,如:

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();