使用JPA Criteria Query,如何获取sysdate + x

时间:2013-08-29 14:11:57

标签: java hibernate jpa

我正在使用JPA Criteria Query hibernate-jpa-2.0-api(1.0.1.Final)。

我希望使用我的条件查询(sysdate +指定的任何值(x))从数据库中获取currentDate() + x

如何才能将cb.currentDate()用于此目的。

2 个答案:

答案 0 :(得分:0)

您必须使用sql查询来获取日期时间。但是,您可以通过hibernate API实现此目的

Timestamp timestamp = (Timestamp) getCurrentSession().createSQLQuery("select SYSDATE param from dual").addScalar("param", Hibernate.TIMESTAMP).uniqueResult(); return new DateTime(timestamp);

答案 1 :(得分:0)

我使用自定义方言来注册自定义函数:

package de.enerko.aaw2.persistence.dialect;

import java.sql.Types;

import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.function.VarArgsSQLFunction;
import org.hibernate.type.StandardBasicTypes;

public class OracleSpatialDialect extends Oracle10gDialect {
    public OracleSpatialDialect() {
        this.registerColumnType(Types.OTHER, "MDSYS.SDO_GEOMETRY");
        this.registerFunction("add_days", new VarArgsSQLFunction(StandardBasicTypes.DATE, "", "+", ""));
    }
}

在persistence.xml中指定它或用于构建实体管理器的任何技术:

<property name="hibernate.dialect" value="OracleSpatialDialect" />

而不是像这样使用它:

builder.function("add_days", Date.class, builder.currentDate(), builder.literal(1))

希望有所帮助。

干杯, 迈克尔。