JPA日期文字

Ago*_*noX 4 date jpa-2.0

如何在不使用(类型化)参数的情况下在JPA查询中表示日期?
如果日期确实是固定的(例如,1980年3月1日),则代码为:

TypedQuery<MyEntity> q = em.createQuery("select myent from db.MyEntity myent where myent.theDate=?1", db.MyEntity.class).setParameter(1, d);
Run Code Online (Sandbox Code Playgroud)

设定:

日期d =新日期(80,Calendar.MARCH,1);

很啰嗦,不是吗?我想将1980/1/3嵌入到我的查询中.

更新:我将样本日期修改为1980/1/3,因为它是1980/1/1,不明确.

Pio*_*cki 6

IIRC您可以在JPQL查询中使用日期文字,就像在JDBC中一样,所以类似于:

// d at the beginning means 'date'
{d 'yyyy-mm-dd'} i.e. {d '2009-11-05'}

// t at the beginning means 'time'
{t 'hh-mm-ss'} i.e. {t '12-45-52'}

// ts at the beginning means 'timestamp'; the part after dot is optional
{ts 'yyyy-mm-dd hh-mm-ss.f'} i.e. {ts '2009-11-05 12-45-52.325'}
Run Code Online (Sandbox Code Playgroud)

应该做的工作(需要花括号和撇号).

  • 同意@AgostinoX,与Eclipselink,Openjpa和Datanucleus合作.Hibernate是个例外. (4认同)
  • 好吧,我终于明白了。JPQL 不是特定于 JPA 的,而是特定于实现的。所以 Hibernate JPA 以与 EclipseLink 不同的方式实现 JPQL(必须对那些谈论轻松更改 JPA 的实现的人进行澄清:-( )。我应该将其作为一个 hibernate 问题来问。 (3认同)
  • 我认为你应该看看这个问题:http://stackoverflow.com/questions/7672342/date-literals-in-hibernate (2认同)