java - java.time.LocalDateTime 类型的属性在 Hibernate 中不能用作 JPA 查询参数

标签 java hibernate jpa java-8 jpql

我有一个 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.Datejava.util.Calendar 作为参数,但它也不起作用。

最佳答案

看到评论说要查询Timestamp

q.setParameter("currentDateTime", new Date(), TemporalType.TIMESTAMP)

所以你的转换器必须是LocalDateTimeTimestamp

我已经使用 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();
    }
}

关于java - java.time.LocalDateTime 类型的属性在 Hibernate 中不能用作 JPA 查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30326004/

相关文章:

java - 如何为每个别名分配条件限制

java - entityManager.createQuery() 上的 AbstractMethodError

java - 使用 REST 请求获取和更改对象列表的内容

java - 在多线程环境中初始化EntityManagerFactory

java - 一种将状态从一个实例传输到另一个实例的更优雅、更有效的方法

eclipse - Tomcat/ eclipse : disable HttpSession serialization during context reload

Java 8 到 openJdk 11 com.sun.org.apache.xml.internal.* 类型不可访问

java - 处理hibernate查询结果

java - Android 可以接听空中来电吗?

java - Apache Camel : What is difference between Message Translator and Content Enricher with Example?