Prezados,
possuo uma classe que possui um relacionamento ManyToMany, gostaria de poder trazer este atributo de lista ordenado. Para isso estou utilizando a annotation @OrderBy, entretanto, quando o hibernate gera a query este não localiza a tabela do atributo passado, que seria a outra tabela que faz relação com a associativa gerando assim uma excexão. Segue a baixo a classe para que haja maior compreenção:
/*
* Grupo.java
*
* Created on 19 de Junho de 2007, 09:41
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package br.gov.inca.tabagismo.bean;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.OrderBy;
/**
*
* @author fpaes
*/
@Entity
@Table(name = "tabagismo_grupo", schema = "tabagismo")
@SequenceGenerator(name = "SEQUENCE", sequenceName = "tabagismo.tabagismo_grupo_id_grupo_seq", allocationSize = 1)
public class Grupo implements java.io.Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE")
@Column(name = "id_grupo")
private Long id;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "cd_turno")
private Turno turno;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "grupo")
@OrderBy(clause="dt_sessao asc")
private List<Sessao> sessoes = new ArrayList<Sessao>();
@Column(name = "cd_visual_grupo")
private String codigoVisual;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "cd_instituicao")
private InstituicaoTabagismo instituicao = new InstituicaoTabagismo();
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "cd_estado_grupo")
private EstadoGrupo estadoGrupo = new EstadoGrupo(new Long(1));
@ManyToMany(targetEntity = Paciente.class, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "tabagismo_grupo_paciente", schema = "tabagismo", joinColumns = {@JoinColumn(name = "cd_grupo")}, inverseJoinColumns = {@JoinColumn(name = "cd_paciente")})
@OrderBy(clause="ds_nome")//atributo que desejo ordenar
private List<Paciente> pacientes = new ArrayList<Paciente>();
@ManyToMany(targetEntity = AgenteTabagismo.class, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "tabagismo_grupo_agente_tabagismo", schema = "tabagismo", joinColumns = {@JoinColumn(name = "cd_grupo")}, inverseJoinColumns = {@JoinColumn(name = "cd_agente_tabagismo")})
@OrderBy(clause="nm_agente")//atributo que desejo ordenar
private List<AgenteTabagismo> coordenadores = new ArrayList<AgenteTabagismo>();
/**
* Creates a new instance of Grupo
*/
public Grupo() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Turno getTurno() {
return turno;
}
public void setTurno(Turno turno) {
this.turno = turno;
}
public List<Sessao> getSessoes() {
return sessoes;
}
public void setSessoes(List<Sessao> sessoes) {
this.sessoes = sessoes;
}
public String getCodigoVisual() {
return codigoVisual;
}
public void setCodigoVisual(String codigoVisual) {
this.codigoVisual = codigoVisual;
}
public InstituicaoTabagismo getInstituicao() {
return instituicao;
}
public void setInstituicao(InstituicaoTabagismo instituicao) {
this.instituicao = instituicao;
}
public EstadoGrupo getEstadoGrupo() {
return estadoGrupo;
}
public void setEstadoGrupo(EstadoGrupo estadoGrupo) {
this.estadoGrupo = estadoGrupo;
}
public List<Paciente> getPacientes() {
return pacientes;
}
public void setPacientes(List<Paciente> pacientes) {
this.pacientes = pacientes;
}
public List<AgenteTabagismo> getCoordenadores() {
return coordenadores;
}
public void setCoordenadores(List<AgenteTabagismo> coordenadores) {
this.coordenadores = coordenadores;
}
}
desde já agradeço