[RESOLVIDO] Hibernate - Could not resolver property

1 resposta
R

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.

1 Resposta

R

Shame on me.

O pateta aqui colocou o ack_timestap (o que é a tabela do banco) ao inves do syslogTimestamp que é a propriedade mapeada. Troquei isso e deu certo, mas fica de exemplo aí para outros.

Criado 24 de julho de 2012
Ultima resposta 24 de jul. de 2012
Respostas 1
Participantes 1