我有一个JPA实体,其属性类型为java.time.LocalDateTime
。我使用javax.persistence.Converter
注释来实现此功能。我可以加载实体并保存它没有问题,但当我尝试执行这样的jpql查询时:
TypedQuery<Event> q = em.createQuery(
"SELECT e " +
"FROM Event e " +
"WHERE :currentDateTime >= e.startDateTime", Event.class);
q.setParameter("currentDateTime", LocalDateTime.now().withSecond(0).withNano(0));
我收到这样的错误:
Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: bytea >= timestamp without time zone
我尝试过很多东西,但无法使参数正常工作。我甚至尝试使用java.util.Date
和java.util.Calendar
作为参数,但它也不起作用。
答案 0 :(得分:1)
我在评论中看到您要查询时间戳记
q.setParameter("currentDateTime", new Date(), TemporalType.TIMESTAMP)
因此您的转换器必须是LocalDateTime
⇔Timestamp
我已经使用Hibernate作为JPA提供程序来完成此操作,并且我的代码在AttributeConverter<LocalDateTime, Timestamp>
@Override
public Timestamp convertToDatabaseColumn(LocalDateTime date) {
if (date == null) {
return null;
} else {
return Timestamp.valueOf(date);
}
}
@Override
public LocalDateTime convertToEntityAttribute(Timestamp value) {
if (value == null) {
return null;
} else {
return value.toLocalDateTime();
}
}