Ordenar com as minhas listas padrão com Hibernate Annotation

2 respostas
Lavieri

é possivel, formar a pesquisa no banco ser ordenada quando não há nenhum pedido de ordenação ??

por exemplo, tenho 1 classe Estado e sempre que faço uma pesquisa ela não vem ordenada por nome.... e não queria a cada pesquisa ter q informar a forma do "sort" ... não teria como na definição da classe falar qual a forma de "sort" padrão ??

Alguma coisa que de pra mudar no @Table, ou alguma definição no cabeçalho da classe.... pq por exemplo a classe pais, tem um método 1-N que lista os estados... mas sai tudo desordenado =/

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

@Entity
@Table(name="grpCidade_Estado", 
		uniqueConstraints={@UniqueConstraint(columnNames={"nome","Pais_id"})})
public class Estado implements Serializable {
	private static final long serialVersionUID = 5926989579947123173L;
	
	private int id;
	private String nome;
	private int paisId;
	private Pais pais;
	private int capitalId;
	private Cidade capital;
	private Set<Cidade> cidades = new HashSet<Cidade>(0);
	
	public Estado() {}
	public Estado(String nome,Pais pais) {
		this.nome = nome;
		this.pais = pais;
	}
	
	@Id
	@GeneratedValue 
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	@Column(nullable=false,length=25) 
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

	@Column(name="pais_id",insertable=false,updatable=false)
	public int getPaisId() {
		return paisId;
	}
	public void setPaisId(int paisId) {
		this.paisId = paisId;
	}
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(nullable=false) 
	public Pais getPais() {
		return pais;
	}
	public void setPais(Pais pais) {
		this.pais = pais;
	}
	
	@Column(name="capital_id",insertable=false,updatable=false)
	public int getCapitalId() {
		return capitalId;
	}
	public void setCapitalId(int capitalId) {
		this.capitalId = capitalId;
	}
	@OneToOne
	@JoinColumn(unique=true) 
	public Cidade getCapital() {
		return capital;
	}
	public void setCapital(Cidade capital) {
		this.capital = capital;
	}
	
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "estado")
	public Set<Cidade> getCidades() {
		return cidades;
	}
	public void setCidades(Set<Cidade> cidades) {
		this.cidades = cidades;
	}
	
	@Override
	public String toString() {
		return this.nome;
	}
}

2 Respostas

T

nao sei se entendi bem a sua duvida , mas a sua classe poderia impelmentar a interface comparable e vc poderia utilizar um treeset ao inves de hashset , assim ao inserir o objeto na coleção estaria ordenado de acordo com a sua implementação do metodo compareTo

Lavieri

Thiago veiga:
nao sei se entendi bem a sua duvida , mas a sua classe poderia impelmentar a interface comparable e vc poderia utilizar um treeset ao inves de hashset , assim ao inserir o objeto na coleção estaria ordenado de acordo com a sua implementação do metodo compareTo

a verdade é que não importa c ali eu coloco um HashSet um TreeSet ou qualquer coisa do genero… esse objeto sera sobrescrito caso o Hibernate popule a lista (e é justamente quando o hibernate faz isso que me interessa)…

o trecho

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "estado") public Set<Cidade> getCidades() { return cidades; }

indica que quando o método getCidades() for invocado, o ibernate deve intervir, fazendo a consulta no banco… e para tal o hibernate cria uma classe dele mesmo que implementa Set (não sei direito qual é a classe) para popular essa lista, e faz o retorno via reflection

Criado 6 de fevereiro de 2009
Ultima resposta 6 de fev. de 2009
Respostas 2
Participantes 2