【问题标题】:HQL Query implementationHQL 查询实现
【发布时间】:2013-12-27 22:55:45
【问题描述】:

我是 Hibernate 的新手,我正在使用 Hibernate 开发一个应用程序。具体来说,我正在尝试使用 Hibernate 实现以下 SQL 查询:

select * from ifcitsv2013 where timestamp between startDate and finishDate and id = '50'

在 Hibernate 中,我有以下查询代码:

DetachedCriteria dc = DetachedCriteria.forClass(IfcitsSensorphistory.class).add(Property.forName("id").eq(sDevice) );
List<Ifcitsv2013> readings = session.createCriteria(Ifcitsv2013.class).add(Property.forName("ifcitsSensorphistory").gt(dc)).list();

映射类Ifcitsv2013如下:

public class Ifcitsv2013 implements Serializable {
    private static final long serialVersionUID = 1L;
    private long readingid;
    private IfcitsSensorphistory ifcitsSensorphistory;
    private Timestamp timestamp;
    private String value;
    private String direction;
    private String quality;
    private String status;  

IfcitsSensorphistory 的班级是:

public class IfcitsSensorphistory {
    private String id;
    private String description;
    private Timestamp starttime;
    private Timestamp endtime;
    private String timeseriesdatatype;
    private String dataorigin;
    private String usagedefineddataorigin;
    private String unit;
    private String value;

当我执行查询时,我得到了Exception

Exception in thread "main" java.lang.NullPointerException
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getProjectedTypes(CriteriaQueryTranslator.java:362)
at org.hibernate.criterion.SubqueryExpression.createAndSetInnerQuery(SubqueryExpression.java:153)
at org.hibernate.criterion.SubqueryExpression.toSqlString(SubqueryExpression.java:69)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:380)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:114)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:83)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:92)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1687)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at com.cartif.dwhconnector.manager.DatabaseCommunicator.retrieveHistoricalData(DatabaseCommunicator.java:242)
at com.cartif.dwhconnector.manager.DWHManager.retrieveData(DWHManager.java:62)
at unittest.DWHConnectorTester.main(DWHConnectorTester.java:31)

谁能帮我开发正确的查询?

【问题讨论】:

    标签: java hibernate oracle11g hql


    【解决方案1】:

    确保您有一个打开的session

    Query q = session.CreateQuery("select * from Ifcitsv2013 left join IfcitsSensorphistory as h where timestamp between :startDate and :finishDate and h.id = 50");
    q.setDate("startDate", startDate);
    q.setDate("finishDate", finishDate);
    List result = q.list(); 
    

    【讨论】:

    • 您好,感谢回复,我确定会话打开了,问题来自表Ifcitsv2013的id列之间的关系,它不是类中的直接属性,而是关系与表 IfcitsSensorphistory
    • 当然,要拥有另一个表的属性,您应该在查询中加入该表。
    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2019-06-12
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2011-02-10
    相关资源
    最近更新 更多