Java 这个特定于Oracle的查询的HQL等价物是什么?

Java 这个特定于Oracle的查询的HQL等价物是什么?,java,hibernate,Java,Hibernate,我在我的一个项目中有一个查询,如下所示,它使用oracle特定的东西。如何在HQL中重写这个 from HotAddressHibId a where a.expirationTsp >= trunc(SYSDATE) 您可以使用带有sqlRestriction的Hibernate条件查询: List elements = session.createCriteria(HotAddressHibId.class) .add( Restrictions.sqlRestrictio

我在我的一个项目中有一个查询,如下所示,它使用oracle特定的东西。如何在HQL中重写这个

from HotAddressHibId a  where a.expirationTsp >= trunc(SYSDATE)

您可以使用带有sqlRestriction的Hibernate条件查询:

List elements = session.createCriteria(HotAddressHibId.class)
    .add( Restrictions.sqlRestriction("expiration_tsp >= trunc(SYSDATE)" )
    .list();

您可以使用带有sqlRestriction的Hibernate条件查询:

List elements = session.createCriteria(HotAddressHibId.class)
    .add( Restrictions.sqlRestriction("expiration_tsp >= trunc(SYSDATE)" )
    .list();
然后准备日期对象剥离小时、分钟、秒和毫秒,并绑定到查询参数

请注意,如果Oracle位于其他时区,行为可能会发生变化

然后准备日期对象剥离小时、分钟、秒和毫秒,并绑定到查询参数

请注意,如果Oracle位于另一时区,行为可能会发生变化。

在Oracle的Hibernate方言中,
trunc()
sysdate()
都注册为函数,因此您可以简单地执行以下操作:

from HotAddressHibId a  where a.expirationTsp >= trunc(sysdate()) 
trunc()
sysdate()
都是用Hibernate方言为Oracle注册的函数,因此您只需执行以下操作:

from HotAddressHibId a  where a.expirationTsp >= trunc(sysdate()) 

实际上是今天的午夜。@trashgod这是正确的,但我想知道这是特定于Oracle的还是特定于Oracle的HQLIt,但Hib会将它不理解的内容传递给RDBMS,因此它可以工作。然而,便携性被扼杀了。只是给路人的信息。我现在明白了,您正在迁移到HQL,而不是更改数据库。实际上是今天的午夜。@trashgod这是正确的,但我想知道这是特定于Oracle的还是特定于Oracle的HQLIt,但Hib会将它不理解的内容传递给RDBMS,因此它可以工作。然而,便携性被扼杀了。只是给路人的信息。我现在明白了,您正在迁移到HQL,而不是更改数据库。