我从数据库中下载记录时遇到问题,该数据库中的日期形式如下:2018-10-14(日期)该字段在数据库中的结构如下所示:next_day DATE NOT NULL调用 findDay 方法时,会抛出异常:Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: date <= bytea一个方法:open fun findDay(day: LocalDate) : Day {val sql = "SELECT bbd FROM com.test.entity.Day d WHERE d.nextDay <= :nextDay ORDER BY d.nextDay DESC"val query: TypedQuery<Day> = entityManager.createQuery(sql, Day::class.java) query.setParameter("nextDay", day) query.maxResults = 1 return query.singleResult}实体:@Entity(name="day")open class Day { @Id var id: Long? = null @Column(name = "next_day") var nextDay: LocalDate? = null}有没有办法从数据库中获取行?
2 回答
不负相思意
TA贡献1777条经验 获得超10个赞
您使用的是LocalDate
作为参数:day
,但您entityManager
只理解java.util.Date
. 你可以这样转换:
Date date = Date.from(day.atStartOfDay(ZoneId.systemDefault()).toInstant());
JPA 2.2 版本确实支持新的 Date API。 https://vladmihalcea.com/whats-new-in-jpa-2-2-java-8-date-and-time-types/
慕姐8265434
TA贡献1813条经验 获得超2个赞
这发生在 PostgreSQL 和使用 Hibernate 并且参数值为 null 时。避免它的一种方法是使用非空值告诉它类型是什么。
有一些静态常量EPOCH = LocalDate.of(1970, 1, 1)
作为优化以避免每次调用时的所有检查和分配。
val query: TypedQuery<Day> = entityManager.createQuery(sql, Day::class.java) query.setParameter("nextDay", EPOCH) query.setParameter("nextDay", day) query.maxResults = 1 return query.singleResult
当然,这会给你一个NoResultException
,因为本质上你是在问anything <= NULL
哪个定义是假的,这意味着没有行会匹配。
添加回答
举报
0/150
提交
取消