@EntityListeners com Hibernate3

3 respostas
rissato

Boa noite pessoal,

estava eu feliz da vida usando a implementação toplink do JPA com meus @EntityListeners funcionando normalmente como manda o figurino. Acontece que por falta de findByExample eu troquei a implementação por Hibernate3 e agora os meus digníssimos @EntityListeners simplesmente pararam de funcionar. Alguem sabe me dizer o que devo fazer?

A princípio a única alteração feita foi quanto a informar ao JPA quais classes são persistentes: Com o toplink eu estava declarando as classes no xml de configuração, e com Hibernate estou informando as classes através de .addAnnotatedClass(MinhaClasse.class). Grato desde já pela ajuda sempre presente no forum.

:slight_smile:

3 Respostas

B

Po kra… muito estranho isso… eu aki uso com o Hibernate trank…

Eu tenho uma entidade assim:

...
import javax.persistence.EntityListeners;
...

@Entity
@EntityListeners( ObjetoComEstadosJPAListener.class )
@SequenceGenerator(name = "sqassunto", sequenceName = "sqassunto")
public class Assunto implements IObjetoComEstados
{
    // construtores.. get and set..
    
    @Id    
    @GeneratedValue(strategy = GenerationType.AUTO, generator="sqassunto")
    private Long id;
    
    @Column(nullable=false)
    private String descricao;
    
    @Transient
    private EstadoObjeto estadoInterno = ESTADO_INICIAL;
}

E na classe ObjetoComEstadosJPAListener:

public class ObjetoComEstadosJPAListener
{
    @PostLoad
    public void postLoad(IObjetoComEstados obj)
    {
        Logger log = Logger.getLogger( obj.getClass().getName() );
        
        if ( null == obj )
        {
            log.log( Level.SEVERE, "object not loaded" );
            return;
        }
        
        obj.setEstadoInterno( IObjetoComEstados.EstadoObjeto.ANTIGO_INALTERADO );
    }

Então, uso esse listener para setar o valor em um atributo transiente…

Como ta a sua? até agora so usei @PostLoad

Uma coisa q talvez possa estar acontecendo… eu nao sei pq nunca mexi com TopLink, mas tem alguma chance de vc estar na sua classe utilizando uma implementação do @EntityListeners do TopLink juntamente com o Hibernate?

rissato

cara… já tentei de tudo…

o pior é que não dá exception e eu já tirei todos os jars do toplink…

to achando que é algum problema de versão talvez… ou não né!? :?

B

rissato:
cara… já tentei de tudo…

o pior é que não dá exception e eu já tirei todos os jars do toplink…

to achando que é algum problema de versão talvez… ou não né!? :?

Bom, eu aki to usando as seguintes versões:
Hibernate 3.2.6 GA
Hibernate Annotations 3.3.1 GA
Hibernate EntityManager 3.3.2 GA

Pode ser realmente algum prob de versão mesmo…

Mas o que acontece exatamente? ele nao passa pelo código do seu Listener? se vc colocar um System.out.println( “Teste” ) la no método da sua classe com o @PostLoad ou qualquer outro, ele nao executa?

Da uma olhada nas versões então… se tiver tudo ok, faz um projeto separado, so com Hibernate e um Bean simples… e ve… pode ser alguma incompatibilidade… seila… muito louco…

Criado 23 de julho de 2008
Ultima resposta 25 de jul. de 2008
Respostas 3
Participantes 2