Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HQL查询实现_Java_Hibernate_Oracle11g_Hql - Fatal编程技术网

Java HQL查询实现

Java HQL查询实现,java,hibernate,oracle11g,hql,Java,Hibernate,Oracle11g,Hql,我是Hibernate新手,我正在用Hibernate开发一个应用程序。具体来说,我尝试使用Hibernate实现以下SQL查询: select * from ifcitsv2013 where timestamp between startDate and finishDate and id = '50' 在Hibernate中,我有以下查询代码: DetachedCriteria dc = DetachedCriteria.forClass(IfcitsSensorphistory.cla

我是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();
而类
ifcitsensorphistory
是:

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 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)
线程“main”java.lang.NullPointerException中的异常 位于org.hibernate.loader.CriteriaQueryTranslator.getProjectedTypes(CriteriaQueryTranslator.java:362) 位于org.hibernate.criteria.SubqueryExpression.createAndSetInnerQuery(SubqueryExpression.java:153) 位于org.hibernate.criteria.SubqueryExpression.toSqlString(SubqueryExpression.java:69) 位于org.hibernate.loader.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:380) 位于org.hibernate.loader.criteria.CriteriaJoinWalker(CriteriaJoinWalker.java:114) 位于org.hibernate.loader.criteria.CriteriaJoinWalker(CriteriaJoinWalker.java:83) 位于org.hibernate.loader.criteria.CriteriaLoader.(CriteriaLoader.java:92) 位于org.hibernate.impl.SessionImpl.list(SessionImpl.java:1687) 位于org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347) 位于com.cartif.dwhconnector.manager.DatabaseCommunicator.retrieveHistoricalData(DatabaseCommunicator.java:242) 位于com.cartif.dwhconnector.manager.DWHManager.retrieveData(DWHManager.java:62) 位于unittest.DWHConnectorTester.main(DWHConnectorTester.java:31)
有人能帮我开发正确的查询吗?

确保您有一个打开的
会话

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列之间的关系,它不是类中的直接属性,而是与表IFCITSSensorPhystorySure的关系。要从另一个表获得属性,您应该在查询中加入该表。
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();