Ordenar collections hibernate

1 resposta
filipeandrep

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

1 Resposta

leandro.anjos

Cara nunca fiz isso, mas pela documentação você apenas teria que trocar a linha:

@OrderBy(clause=“dt_sessao asc”)

Por:

@OrderBy(“dt_sessao asc”)

Se não funcionar, tenta dar uma olhada no link:

https://java.sun.com/javaee/5/docs/api/javax/persistence/OrderBy.html

Criado 21 de dezembro de 2007
Ultima resposta 21 de dez. de 2007
Respostas 1
Participantes 2