[RESOLVIDO] ValidateEventListener cannot be cast to org.hibernate.event.PreInsertEventListener

Olá pessoal,

Estou aprendendo a usar Hibernate através de Annotations e logo de início eu me deparei com o seguinte erro:

Procurei aqui no GUJ e em outros fóruns, mas não encontrei a solução.

Meu hibernate.cfg.xml está assim:

[code]<?xml version=‘1.0’ encoding=‘utf-8’?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>

<hibernate-configuration>
<session-factory>

    &lt;!-- Configuração de conexão com o banco --&gt;
    &lt;property name="connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;
    &lt;property name="connection.url"&gt;jdbc:mysql://localhost:3306/enic?autoReconnect=true&lt;/property&gt;
    &lt;property name="connection.username"&gt;enic&lt;/property&gt;
    &lt;property name="connection.password"&gt;enic&lt;/property&gt;
    &lt;property name="connection.autoReconnect"&gt;true&lt;/property&gt;

    &lt;!-- Pool de conexão JDBC (use para built-in) --&gt;
    &lt;property name="connection.pool_size"&gt;5&lt;/property&gt;

    &lt;!-- Dialeto SQL --&gt;
    &lt;property name="dialect"&gt;org.hibernate.dialect.MySQLInnoDBDialect&lt;/property&gt;

    &lt;!-- Habilitar gerenciador de contexto de sessão automática do Hibernate --&gt;
    &lt;property name="current_session_context_class"&gt;thread&lt;/property&gt;

    &lt;!-- Disabilitar segundo núvel de cache --&gt;
    &lt;property name="cache.provider_class"&gt;org.hibernate.cache.NoCacheProvider&lt;/property&gt;

    &lt;!-- Exibir as SQL executadas --&gt;
    &lt;property name="show_sql"&gt;true&lt;/property&gt;
    
    &lt;!-- Apaga e recria a estrutura do banco cada vez que o servidor é reiniciado --&gt;
    &lt;property name="hbm2ddl.auto"&gt;create&lt;/property&gt;
    
    &lt;!-- Pool de conexão C3P0 --&gt;
	&lt;property name="c3p0.min_size"&gt;5&lt;/property&gt;
	&lt;property name="c3p0.max_size"&gt;50&lt;/property&gt;
	&lt;property name="c3p0.timeout"&gt;1800&lt;/property&gt;
	&lt;property name="c3p0.acquire_increment"&gt;10&lt;/property&gt;
	
	&lt;!-- Mapeamento de classes --&gt;
	&lt;mapping class="model.person.TesteAnnotation"/&gt; 
	
&lt;/session-factory&gt;

</hibernate-configuration>[/code]
Alguém pode me ajudar?
Obrigado.

Galera, resolvi o problema e vim até aqui compartilhar a solução caso alguém algum dia precise 8)
Afinal, é pra isso que server um fórum, não é?! :lol:

SOLUÇÃO:

Na pasta %JBOSS_HOME%\server\default\lib eu deletei os seguintes arquivos:

[list]ejb3-persistence.jar[/list]
[list]hibernate3.jar[/list]
[list]hibernate-annotations.jar[/list]
[list]hibernate-entitymanager.jar[/list]

Não tenho certeza do motivo que fez dar certo, mas acredito que esses arquivos era de algum hibernate antigo ou de versões diferentes.

É Isso aí.
Abraços.

Lucas Catón.

Post um pouco antigo, mas passei por este problema recentemente. Este problema ocorre quando existe uma incompatibilidade entre a a implementacao do hibernate instanciado a partir do classloader da sua aplicacao e o hibernate carregado a partir do classloader do container web, no caso o Jboss.

A melhor solucao para este caso depende do ambiente que estamos lidando. Por exemplo, caso vc esteja utilizando um datasource a partir de um JNDI registrado no container Web, seria ideal manter estas libs no classpatn do container Web, ou seja, neste caso poderiamos optar por nao exclui-las da pasta lib do Jboss. Seguindo por esta linha, a solucao seria:

  1. caso seja um projeto MAVEN, modificar o escopo da dependencia do Hibernate para provided, garantindo assim que a implementacao do hibernate seja provida pelo proprio container (verifique se as versoes declaradas no POM e a do classpath do container sao as mesmas)
  2. caso seja um projeto ANT, apenas declarar a dependencia atraves de uma referencia no classpath e nao copiar o(s) jars na pasta lib do WAR ou EAR

A opcao de deletar as libs do container tb e’ valida, em especial se os projetos que serao instalados neste servidor de aplicacao utilizem cada um a sua propria lib ou jars do hibernate. Neste caso, manteriamos sob responsabilidade do classloader de cada uma das aplicacoes o carregamento das classes do Hibernate.