Problema com @OrderBy - Hibernate

Pessoal, estou com um problema que não consigo resolver.

Tenho três classes que se relacionam:


@Entity
@SequenceGenerator(name = "FROTA_SEQ", sequenceName = "frota_seq")
public class Frota implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO,generator="FROTA_SEQ")
	private Long id;
	private String nome;
	
	@OneToMany(mappedBy="frota")
	@OrderBy("posicaoAtual desc")
	private List<Dispositivo> dispositivos;
}



@Entity
@SequenceGenerator(name = "DISPOSITIVO_SEQ", sequenceName = "dispositivo_seq")
public class Dispositivo implements Serializable {
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO,generator="DISPOSITIVO_SEQ")
	private Long id;
	private String nome;
	
	private int banco = 0;//paginação

	@ManyToOne
	private Frota frota;

	@OneToOne
	private Posicao posicaoAtual;
}

@Entity
@SequenceGenerator(name = "POSICAO_SEQ", sequenceName = "posicao_seq")
public class Posicao implements Serializable{
		
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO,generator="POSICAO_SEQ")
	private Long id;
	
                private Date hora;

	@ManyToOne
	private Dispositivo dispositivo;
}

O que acontece é o seguinte: quero q a lista de dispositivos da minha classe frota seja ordenada pela posição atual, como fiz a annotation (@OrderBy(“posicaoAtual desc”)), porém, ele ordena pelo id da posição atual, e queria que ele ordenasse pela hora da posicaoAtual.

Ja tentei colocar @OrderBy(“posicaoAtual.hora desc”), mas ai da exception.

Alguém ai sabe como resolver isso?

Eu ja tentei implementar a interface Comparable com a classe Posicao, mas nao funcionou tbm.

Se alguém puder me ajudar agradeço.

Abraços

Se não me engano, o order by usa o nome do campo que de fato tá no banco, se vc quer ordenar esta listagem por um campo que está em outra tabela, acho que vai ter de fazer um subselect… tomara que eu esteja errado!!!

Alberto

Pelo menos no xml, é assim, mas talvez esteja me confundido com o where… de qualquer forma pode ser que lhe ajude.

O problema é que na hora que uso, simplesmente puxo a frota do banco… ela ja traz a lista de dispositivos… eu queria q essa lista viesse ja ordenada, sem ter de fazer outro select e atribuir à lista.

Como eu poderia fazer com o subselect?

Meu prazo está apertado e ja estou perdendo um tempo absurdo com isso.

Se puder me ajudar agradeço.

Valew

Ninguem?

Estou com mesmo problema q vc.
Vc conseguiu resolver?

Galera eu fiz o seguinte

@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name="pro_cod_id",updatable=false,insertable=false)	
@OrderBy("ppt_dta_tramite desc") 
private Set<ProposicaoTramiteVO> proposicaoTramiteSet = new HashSet<ProposicaoTramiteVO>(0);

e funcionou perfeitamente, ou seja, ordenando pelo campo ppt_dta_tramite,
Acho que o problema era na importação da Classe ou seja:

javax.persistence
e não o
org.hibernate.annotations