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

2 respostas
lucascaton

Olá pessoal,

Estou aprendendo a usar Hibernate através de Annotations e logo de início eu me deparei com o seguinte erro:
java.lang.ClassCastException: org.hibernate.validator.event.ValidateEventListener cannot be cast to org.hibernate.event.PreInsertEventListener
Procurei aqui no GUJ e em outros fóruns, mas não encontrei a solução. Meu hibernate.cfg.xml está assim:
<?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>

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

        <!-- Pool de conexão JDBC (use para built-in) -->
        <property name="connection.pool_size">5</property>

        <!-- Dialeto SQL -->
        <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

        <!-- Habilitar gerenciador de contexto de sessão automática do Hibernate -->
        <property name="current_session_context_class">thread</property>

        <!-- Disabilitar segundo núvel de cache -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Exibir as SQL executadas -->
        <property name="show_sql">true</property>
        
        <!-- Apaga e recria a estrutura do banco cada vez que o servidor é reiniciado -->
        <property name="hbm2ddl.auto">create</property>
        
        <!-- Pool de conexão C3P0 -->
		<property name="c3p0.min_size">5</property>
		<property name="c3p0.max_size">50</property>
		<property name="c3p0.timeout">1800</property>
		<property name="c3p0.acquire_increment">10</property>
		
		<!-- Mapeamento de classes -->
		<mapping class="model.person.TesteAnnotation"/> 
		
    </session-factory>
</hibernate-configuration>
Alguém pode me ajudar? Obrigado.

2 Respostas

lucascaton

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.

D

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.

Criado 22 de outubro de 2008
Ultima resposta 14 de mar. de 2014
Respostas 2
Participantes 2