我從數(shù)據(jù)庫(kù)中下載記錄時(shí)遇到問(wèn)題,該數(shù)據(jù)庫(kù)中的日期形式如下:2018-10-14(日期)該字段在數(shù)據(jù)庫(kù)中的結(jié)構(gòu)如下所示:next_day DATE NOT NULL調(diào)用 findDay 方法時(shí),會(huì)拋出異常:Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: date <= bytea一個(gè)方法: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}實(shí)體:@Entity(name="day")open class Day { @Id var id: Long? = null @Column(name = "next_day") var nextDay: LocalDate? = null}有沒(méi)有辦法從數(shù)據(jù)庫(kù)中獲取行?
2 回答

不負(fù)相思意
TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
您使用的是LocalDate
作為參數(shù):day
,但您entityManager
只理解java.util.Date
. 你可以這樣轉(zhuǎn)換:
Date date = Date.from(day.atStartOfDay(ZoneId.systemDefault()).toInstant());
JPA 2.2 版本確實(shí)支持新的 Date API。 https://vladmihalcea.com/whats-new-in-jpa-2-2-java-8-date-and-time-types/

慕姐8265434
TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
這發(fā)生在 PostgreSQL 和使用 Hibernate 并且參數(shù)值為 null 時(shí)。避免它的一種方法是使用非空值告訴它類型是什么。
有一些靜態(tài)常量EPOCH = LocalDate.of(1970, 1, 1)
作為優(yōu)化以避免每次調(diào)用時(shí)的所有檢查和分配。
val query: TypedQuery<Day> = entityManager.createQuery(sql, Day::class.java) query.setParameter("nextDay", EPOCH) query.setParameter("nextDay", day) query.maxResults = 1 return query.singleResult
當(dāng)然,這會(huì)給你一個(gè)NoResultException
,因?yàn)楸举|(zhì)上你是在問(wèn)anything <= NULL
哪個(gè)定義是假的,這意味著沒(méi)有行會(huì)匹配。
添加回答
舉報(bào)
0/150
提交
取消