我在从数据库中下载记录时遇到问题,该记录的日期以数据库的形式如下: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
}
我是否可以从数据库中获取行?
答案 0 :(得分:1)
您正在使用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/
答案 1 :(得分:0)
在使用Hibernate并且参数值为null的PostgreSQL中会发生这种情况。避免出现这种情况的一种方法是通过使用非null值告诉它什么类型。
具有一些静态常量sqrt(pow(table2.x-table1.x,2) + pow(table2.y-table1.y,2) + pow(table2.z-table1.z,2) + pow(table2.t-table1.t,2))
作为优化,以避免在每次调用时进行所有检查和分配。
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
,根据定义,这是错误的,这意味着没有行会匹配。