将 java.time.LocalDate 与 postgres 日期进行比较的问题

我从数据库中下载记录时遇到问题,该数据库中的日期形式如下: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

}

有没有办法从数据库中获取行?


汪汪一只猫
浏览 372回答 2
2回答

不负相思意

您使用的是LocalDate作为参数:day,但您entityManager只理解java.util.Date.&nbsp;你可以这样转换:Date&nbsp;date&nbsp;=&nbsp;Date.from(day.atStartOfDay(ZoneId.systemDefault()).toInstant());JPA 2.2 版本确实支持新的 Date API。&nbsp;https://vladmihalcea.com/whats-new-in-jpa-2-2-java-8-date-and-time-types/

慕姐8265434

这发生在 PostgreSQL 和使用 Hibernate 并且参数值为 null 时。避免它的一种方法是使用非空值告诉它类型是什么。有一些静态常量EPOCH = LocalDate.of(1970, 1, 1)作为优化以避免每次调用时的所有检查和分配。val&nbsp;query:&nbsp;TypedQuery<Day>&nbsp;=&nbsp;entityManager.createQuery(sql,&nbsp;Day::class.java) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setParameter("nextDay",&nbsp;EPOCH) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setParameter("nextDay",&nbsp;day) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.maxResults&nbsp;=&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;query.singleResult当然,这会给你一个NoResultException,因为本质上你是在问anything <= NULL哪个定义是假的,这意味着没有行会匹配。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java