2013-12-10 6 views
0

Я новичок в Hibernate, и я разрабатываю приложение с Hibernate. Конкретно, я пытаюсь выполнить следующий SQL-запрос с Hibernate:Реализация запроса HQL

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) 

Может кто-нибудь помочь мне развить правильный запрос?

ответ

0

Удостоверьтесь, что у вас есть открытый 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(); 
+0

Привет, спасибо за ответ, я уверен, открыт сеанс, проблема возникает из отношений между Идентификатор столбца таблицы Ifcitsv2013, которая не является прямым атрибутом в классе, но отношения с table IfcitsSensorphistory –

+0

Конечно, чтобы иметь атрибут из другой таблицы, вы должны присоединиться к этой таблице в запросе. –

Смежные вопросы