【问题标题】:Using JPA Criteria Query, how to get the sysdate + x使用 JPA Criteria Query,如何获取 sysdate + x
【发布时间】:2013-08-29 14:11:57
【问题描述】:

我正在使用 JPA 标准查询 hibernate-jpa-2.0-api (1.0.1.Final)。

我想使用我的条件查询(sysdate + any value(x) specified)从数据库中获取currentDate() + x

我如何使用cb.currentDate() 来达到这个目的。

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

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

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

    【讨论】:

    • Jijo 想使用 Criteria Query……而不是普通的 SQL 查询。实现这个没什么大不了的。
    【解决方案2】:

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

    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))
    

    希望对您有所帮助。

    干杯, 迈克尔。

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 2011-08-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      相关资源
      最近更新 更多