ata*_*man 15 datetime jpa date jpql jpa-2.0
我试图将Calendars与JPA2 进行比较.查询看起来有点像:
TypedQuery<X> q = em.createQuery("select r from Record r where r.calendar= :calendar", X.class);
Calendar c = foo(); // setting fields and stuff
q.setParameter("calendar", c);
Run Code Online (Sandbox Code Playgroud)
但是,这会比较日期+时间.我想知道MM:DD:YYYY是否相等而且不关心时间.有没有一种很好的方法在JPA2中做到这一点,还是我必须创建一个本机查询?
我尝试将HH:MM:SS:...设置为零,然后将其保存在数据库中,但我不知道这是非常明智的,关于时区和夏令时和东西.
Otá*_*cia 27
q.setParameter("calendar", c, TemporalType.DATE)
Run Code Online (Sandbox Code Playgroud)
您可以将TemporalType.DATE传递给setParameter方法以截断日期+时间.
没有提到DateTime函数允许在JPQL的规范中这样做,但你总是可以欺骗和做
select r from Record r where r.calendar >= :theDayAtZeroOClock and r.calendar < :theDayAfterAtZeroOClock
Run Code Online (Sandbox Code Playgroud)
小智 7
Mysql和H2兼容的日期比较忽略时间部分:
`@Query("SELECT DISTINCT s " +
"FROM Session s " +
"JOIN s.movie m " +
"WHERE m.id = :movie AND CAST(s.time AS date) = CAST(:date AS date) " +
"ORDER BY s.time")
List<Session> getByMovieAndDate(@Param("movie") Long movie, @Param("date") LocalDateTime date);`
Run Code Online (Sandbox Code Playgroud)
使用 Oracle 数据库时,您可以trunc在 JPQL 查询中使用该函数,例如:
TypedQuery<X> q = em.createQuery("select r from Record r where trunc(r.calendar) = trunc(:calendar)", X.class);
Run Code Online (Sandbox Code Playgroud)
另请参阅https://cirovladimir.wordpress.com/2015/05/18/jpa-trunc-date-in-jpql-query-oracle/
| 归档时间: |
|
| 查看次数: |
37508 次 |
| 最近记录: |