Seguinte.
To tentando fazer um select de acordo com duas condições.
O código é o seguinte:
public List<Ticket> getOpenTickets(){
Session session = HibernateUtil.getSession(HibernateUtil.REMOTE);
Criteria criteria = session.createCriteria(Ticket.class);
criteria.add(Restrictions.isNotNull("ack_timestamp"));
criteria.add(Restrictions.eq("status", new Integer(1)));
@SuppressWarnings("unchecked")
List<Ticket> list = criteria.list();
session.close();
return list;
}
O model desse Ticket tem mapeado o ack_timestamp:
public class Ticket {
public static final int CRITICAL = 0;
public static final int MAJOR = 1;
public static final int MINOR = 2;
@Id
@SequenceGenerator(name="sequenceIDGenerator", sequenceName="tickets_id_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "sequenceIDGenerator")
private int id;
@Column(name="status")
private int status;
@Column(name="central_timestamp")
private Timestamp centralTimestamp;
@Column(name="main_severity")
private int mainSeverity;
@Column(name="message")
private String message;
@Column(name="ack_timestamp")
private Timestamp syslogTimestamp;
//.. some other stuff
}
Quando eu executo essa função recebo o seguinte stacktrace:
Exception in thread "main" org.hibernate.QueryException: could not resolve property: ack_timestamp of: net.fiberwork.syslogger.model.Ticket
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:75)
at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1482)
at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:62)
at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1457)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:483)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.findColumns(CriteriaQueryTranslator.java:498)
at org.hibernate.criterion.NotNullExpression.toSqlString(NotNullExpression.java:49)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:380)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:113)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:92)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1697)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at net.fiberwork.syslogger.database.dao.TicketDAO.getOpenTickets(TicketDAO.java:23)
at net.fiberwork.syslogger.database.dao.TicketDAO.main(TicketDAO.java:40)
Quando eu executo comentando a linha:
Funciona. Apenas me traz os ticket de status = 1 (sendo nulos ou não o ack_timestamp) mas funciona.
Pesquisei, mas não consegui encontrar um problema. A coluna existe, o time é timestamp withou timezone do PostgreSQL.