Pessoal, bom dia!
estou com o seguinte problema, estou tentando rodar um query via criteria que tem chave composta, segue os detalhes da minha implmentacao:
Classe ForcaTrabalhoPK que é embeddable
@Embeddable
public class ForcaTrabalhoPK implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String matricula;
private Empresa empresa;
/**
* @return the matricula
*/
@Column(name = "FOTR_CD_MATRICULA", unique = true, nullable = false, length=15)
public String getMatricula() {
return matricula;
}
/**
* @param matricula the matricula to set
*/
public void setMatricula(String matricula) {
this.matricula = matricula;
}
/**
* Getter empresa.
* @return valor do empresa
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "EMPR_CD_EMPRESA", nullable = false)
public Empresa getEmpresa() {
return empresa;
}
/**
* Setter para empresa.
* @param value valor para empresa
*/
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
}
Classe persistente ForcaTrabalho
public class ForcaTrabalho {
/* ---------------- Atributos ----------------- */
/**
* Campo matricula (PK)
*/
private ForcaTrabalhoPK id;
// restante dos atributos....
@EmbeddedId
public ForcaTrabalhoPK getId() {
return this.id;
}
/**
* Setter para matricula.
*
* @param value
* valor para matricula
*/
public void setId(ForcaTrabalhoPK id) {
this.id = id;
}
Meu dao, no método da query:
DetachedCriteria criteria = daoBehavior.createDetachedCriteria(ForcaTrabalho.class);
if(StringUtils.isNotBlank(forcaTrabalhoFilter.getChave())){
criteria.add(Restrictions.ilike("chaveColaborador", forcaTrabalhoFilter.getChave().trim(), org.hibernate.criterion.MatchMode.ANYWHERE));
}
/* SITUACAO */
if(forcaTrabalhoFilter.getSituacaoASMS() != null){
criteria.add(Restrictions.eq("situacaoPetrobras",forcaTrabalhoFilter.getSituacaoASMS()));
}
/* MATRICULA */
if(StringUtils.isNotBlank(forcaTrabalhoFilter.getMatricula())){
criteria.add(Restrictions.ilike("id.matricula", forcaTrabalhoFilter.getMatricula().trim(),org.hibernate.criterion.MatchMode.ANYWHERE));
}
/* NOME */
if(StringUtils.isNotBlank(forcaTrabalhoFilter.getNome())){
criteria.add(Restrictions.ilike("nomeColaborador", forcaTrabalhoFilter.getNome().trim(), org.hibernate.criterion.MatchMode.ANYWHERE));
}
// Ordenacao default = Matricula
if(pagination.getOrdering() != null && pagination.getOrdering().length == 0){
criteria.addOrder(Order.asc("id.matricula").ignoreCase());
}
return daoBehavior.findByCriteria(criteria, pagination);
Erro:
SEVERE: org.springframework.orm.hibernate3.HibernateQueryException: property does not map to a single column: id; nested exception is org.hibernate.QueryException: property does not map to a single column: id
javax.faces.el.EvaluationException: org.springframework.orm.hibernate3.HibernateQueryException: property does not map to a single column: id; nested exception is org.hibernate.QueryException: property does not map to a single column: id
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at br.com.petrobras.framework.support.jsf.listener.BusinessExceptionCatcherActionListener.processAction(BusinessExceptionCatcherActionListener.java:71)
at javax.faces.component.UICommand.broadcast(UICommand.java:387)
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:329)
at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.java:304)
....
Caused by: org.springframework.orm.hibernate3.HibernateQueryException: property does not map to a single column: id; nested exception is org.hibernate.QueryException: property does not map to a single column: id
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:657)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.findByCriteria(HibernateTemplate.java:1055)
at org.springframework.orm.hibernate3.HibernateTemplate.findByCriteria(HibernateTemplate.java:1048)
....
Caused by: org.hibernate.QueryException: property does not map to a single column: id
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumn(CriteriaQueryTranslator.java:394)
at org.hibernate.criterion.CountProjection.toSqlString(CountProjection.java:62)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getSelect(CriteriaQueryTranslator.java:333)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:102)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:91)
Alguém faz ídeia, ou já passou por isso?
Obrigado,
Marcelo :shock: