Lista ordenada de entidade mapeada como @OneToMany [RESOLVIDO]

Desculpe se o tópico é duplicado, mas dei uma pesquisada e não encontrei algo que resolvesse o meu problema.

Meu problema: tenho duas entidades (Pessoa e Endereço), e o relacionamento entre elas é de 1 para muitos, ou seja, 1 pessoa pode ter muitos endereços.
O mapeamento da classe Pessoa fica da seguinte forma:


@Table
@Entity
public class Pessoa{
     
	@OneToMany(mappedBy = "idPessoa", fetch = FetchType.LAZY)
	@Cascade({ CascadeType.REFRESH, CascadeType.SAVE_UPDATE, CascadeType.DELETE_ORPHAN })
	private Set<Endereco> enderecoList = new HashSet<Endereco>(0);

	//getters e setters
}

É o próprio hibernate que realiza a busca dos enderecos, mas eu a ordenação dos registros na lista não fica da forma como eu queria (que deveria ser sempre ordenado pelo id do endereço).
Aí eu preciso ficar sempre usando Collections.sort pra ordenar a lista em todo lugar q eu usá-la. Já tentei colocar o Collections.sort dentro do getEnderecoList da classe Pessoa pra reduzir o número pra 1 a utilização da ordenação, mas isso também não funcionou.

Enfim, alguém sabe de alguma maneira pra forçar o hibernate a trazer o enderecoList ordenado de acordo com algum atributo?

boa tarde

Faz o seguinte:

@OrderBy(value=“name_column”)

ficará assim:

    @Table  
    @Entity  
    public class Pessoa{  
           
        @OneToMany(mappedBy = "idPessoa", fetch = FetchType.LAZY)  
        @Cascade({ CascadeType.REFRESH, CascadeType.SAVE_UPDATE, CascadeType.DELETE_ORPHAN })   
        @OrderBy(value="name_column")
        private Set<Endereco> enderecoList = new HashSet<Endereco>(0);  
      
        //getters e setters  
    }  

Até mais.

Ordernando listas e utilizando Map como atributo mapeado
:wink:

Vlw velho! isso mesmo que eu queria.

Obrigado!

Eu tenho esse mesmo caso e, já tentei de tudo que é forma utilizar a notação @OrderBy, tanto do javax, quanto do Hibernate. Só que na hora de subir a aplicação da o erro abaixo.
Cheguei a resolver o problema de ordenar colocando no get da collection um sort. Mas não queria ter que fazer desta forma. Quero usar a anotação mesmo. E vi em varios lugares, a principio não tem segredo, é só por e dizer por qual coluna quer ordenar.

11:50:23,309 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.persistenceunit."SceWebEar.ear/SceWeb.war#pu": org.jboss.msc.service.StartException in service jboss.persistenceunit."SceWebEar.ear/SceWeb.war#pu": Failed to start service at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.7.0] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0] at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0] Caused by: javax.persistence.PersistenceException: [PersistenceUnit: pu] Unable to build EntityManagerFactory at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889) at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85) at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] ... 3 more Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.collection.OneToManyPersister at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:248) at org.hibernate.persister.internal.PersisterFactoryImpl.createCollectionPersister(PersisterFactoryImpl.java:196) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:375) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737) at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904) ... 9 more Caused by: org.hibernate.HibernateException: Unable to parse order-by fragment at org.hibernate.sql.ordering.antlr.OrderByFragmentTranslator.render(OrderByFragmentTranslator.java:66) at org.hibernate.sql.Template.renderOrderByStringTemplate(Template.java:696) at org.hibernate.persister.collection.AbstractCollectionPersister.<init>(AbstractCollectionPersister.java:558) at org.hibernate.persister.collection.OneToManyPersister.<init>(OneToManyPersister.java:85) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0] at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) [rt.jar:1.7.0] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) [rt.jar:1.7.0] at java.lang.reflect.Constructor.newInstance(Unknown Source) [rt.jar:1.7.0] at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:226) ... 14 more Caused by: java.lang.ClassCastException: antlr.CommonToken cannot be cast to antlr.Token at antlr.CharScanner.makeToken(CharScanner.java:173) at org.hibernate.sql.ordering.antlr.GeneratedOrderByLexer.mIDENT(GeneratedOrderByLexer.java:238) at org.hibernate.sql.ordering.antlr.GeneratedOrderByLexer.nextToken(GeneratedOrderByLexer.java:138) at antlr.TokenBuffer.fill(TokenBuffer.java:69) at antlr.TokenBuffer.LA(TokenBuffer.java:80) at antlr.LLkParser.LA(LLkParser.java:52) at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.expression(GeneratedOrderByFragmentParser.java:504) at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.sortKey(GeneratedOrderByFragmentParser.java:325) at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.sortSpecification(GeneratedOrderByFragmentParser.java:241) at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.orderByFragment(GeneratedOrderByFragmentParser.java:190) at org.hibernate.sql.ordering.antlr.OrderByFragmentTranslator.render(OrderByFragmentTranslator.java:60) ... 22 more

Segue o bean.

@OneToMany(mappedBy = "empresa", targetEntity = EmpresaTipoAjuste.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval=true) @org.hibernate.annotations.OrderBy(clause="codigo ASC") private Set<EmpresaTipoAjuste> empresasTiposAjustes = new LinkedHashSet<EmpresaTipoAjuste>();

tentei assim também, utilizando javax.

@OneToMany(mappedBy = "empresa", targetEntity = EmpresaTipoAjuste.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval=true) @OrderBy("codigo ASC") private Set<EmpresaTipoAjuste> empresasTiposAjustes = new LinkedHashSet<EmpresaTipoAjuste>();

Alguém sabe o que pode estar acontecendo?

Só pra constar. O problema foi resolvido modificando a versão do antlr de 2.7.6 para 3.0.

Obrigado de qualquer forma.