Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime 在JPA2(JPQL)中仅比较日期(无时间)_Datetime_Jpa_Date_Jpa 2.0_Jpql - Fatal编程技术网

Datetime 在JPA2(JPQL)中仅比较日期(无时间)

Datetime 在JPA2(JPQL)中仅比较日期(无时间),datetime,jpa,date,jpa-2.0,jpql,Datetime,Jpa,Date,Jpa 2.0,Jpql,我正在尝试将日历与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); TypedQuery q=em.createQuery(“从记录r中选择r,其

我正在尝试将日历与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);
TypedQuery q=em.createQuery(“从记录r中选择r,其中r.calendar=:calendar”,X.class);
日历c=foo();//设置字段和内容
q、 设置参数(“日历”,c);
但是,这会比较日期和时间。我想知道MM:DD:YYYY是否相等,是否不在乎时间。在JPA2中有没有一种很好的方法来实现这一点,或者我必须创建一个本机查询


我尝试设置HH:MM:SS:。。。在将其保存到数据库中之前将其设置为零,但我不知道这是否是非常明智的,关于时区和夏令时之类的东西。

在JPQL规范中没有提到允许这样做的日期时间函数,但您总是可以欺骗并这样做

select r from Record r where r.calendar >= :theDayAtZeroOClock and r.calendar < :theDayAfterAtZeroOClock
从记录r中选择r,其中r.calendar>=:Dayatzerooclock和r.calendar<:TheDayaftherooclock

您可以将TemporalType.DATE传递给setParameter方法以截断日期+时间。

我必须在where子句中使用DATE\u trunc:

    TypedQuery<X> q = em.createQuery("select r from Record r where date_trunc('day',r).calendar= :calendar", X.class);
Calendar c = foo(); // setting fields and stuff
q.setParameter("calendar", c, TemporalType.DATE);
TypedQuery q=em.createQuery(“从记录r中选择r,其中日期('day',r.)。日历=:calendar”,X.class);
日历c=foo();//设置字段和内容
q、 setParameter(“日历”,c,TemporalType.DATE);

我的解决方案使用spring数据jpa@query:

select * from table_name where substring(something.date, 1,10) = substring(date_from_param, 1,10)

它工作正常,但您必须确保日期始终采用正确的格式。

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);`
`@Query(“选择不同的s”+
“来自会话s”+
“加入s.m电影”+
“其中m.id=:电影和演员(s.time AS date)=演员(:date AS date)”+
“s.time订购”)
列出getByMovieAndDate(@Param(“movie”)长电影,@Param(“date”)LocalDateTime日期)`

使用Oracle数据库时,您可以在JPQL查询中使用
trunc
功能,例如:

TypedQuery<X> q = em.createQuery("select r from Record r where trunc(r.calendar) = trunc(:calendar)", X.class);
TypedQuery q=em.createQuery(“从记录r中选择r,其中trunc(r.calendar)=trunc(:calendar)”,X.class);

另请参见

我认为在实体中的列定义上有@Temporal(TemporalType.TIMESTAMP)注释时,它不起作用。你知道如何解决这个问题吗?你使用的是哪个提供商?我使用的是hibernate
TypedQuery<X> q = em.createQuery("select r from Record r where trunc(r.calendar) = trunc(:calendar)", X.class);