31
respostas

Erro ao executar insert em DAOGENERICO

Alguem sabe o motivo deste erro

Exception in thread "main" java.lang.IncompatibleClassChangeError: class org.hibernate.ejb.HibernatePersistence has interface org.hibernate.ejb.AvailableSettings as super class at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader$CachingPersistenceProviderResolver.loadResolverClasses(PersistenceProviderResolverHolder.java:150) at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader$CachingPersistenceProviderResolver.(PersistenceProviderResolverHolder.java:130) at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader.getPersistenceProviders(PersistenceProviderResolverHolder.java:88) at javax.persistence.Persistence.getProviders(Persistence.java:75) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) at br.com.empresa.connection.ConnectionFactory.(ConnectionFactory.java:9) at br.com.empresa.DAO.DaoGenerico.(DaoGenerico.java:10) at br.com.empresa.testclasse.InsertApplication.main(InsertApplication.java:12)

31 respostas

De acordo com a definição do Javadoc do erro:

"Thrown when an incompatible class change has occurred to some class definition. The definition of some class, on which the currently executing method depends, has since changed."

https://docs.oracle.com/javase/7/docs/api/java/lang/IncompatibleClassChangeError.html

Ou seja, provavelmente é um erro de sync com alguma biblioteca/classe alterada e não refletida no código. Tenta dar um clean no projeto e recompila-lo.

O procedimento que falou resolveu o erro mas veio outro

Erro: Não foi possível localizar nem carregar a classe principal

Olha só o que ocorre:

Se eu der um clear no Maven ele remove o primeiro erro e da o segundo erro , mas se ser um update Project ele volta o primeiro erro

Estranho. Verifica se o pacote class está configurado no build path e se a classe gerada está por lá. Se não estiver, é algum erro de configuração da compilação.

sim , esta no Source seria isto

Qual o ambiente que você está tentando rodar isso? Via CMD? Dentro do Eclipse, num projeto web?

Dentro do eclipse a classe e para desk e depois vou modificar para rodar em web

mas a principio uma classe java dentro do eclipse

Então é dentro de um main? Poderia colocar o código em questão?

classe insert public class InsertApplication {

public static void main(String[] args) {

Pessoa pessoa = new Pessoa();

DaoGenerico daoPessoa = new DaoGenerico();

pessoa.setNome("eu"); pessoa.setIdade(28);

daoPessoa.saveOrUpdate(pessoa);

System.out.println("Entidades salvas com sucesso!");

} }

e todo vez que executo vem o erro Exception in thread "main" java.lang.IncompatibleClassChangeError: class

Acho que entendi.

Você está usando um método específico do Hibernate (saveOrUpdate) que não é especificada pela JPA. Tente usar o persist no lugar do saveOrUpdate (isso se você estiver usando o saveOrUpdate dentro do método da dao)

Coloquei mas informa que não e compatível

mesmo colocando o persiste na dao

package br.com.empresa.DAO;

import javax.persistence.EntityManager;

import br.com.empresa.connection.ConnectionFactory; import br.com.empresa.DAO.EntidadeBase;

public class DaoGenerico {

private static EntityManager manager = ConnectionFactory.getEntityManager();;

public T findById(Class clazz, Long id){ return manager.find(clazz, id); }

public void saveOrUpdate(T obj){ try{ manager.getTransaction().begin(); if(obj.getId() == null){ manager.persist(obj); }else{ manager.merge(obj); } manager.getTransaction().commit(); }catch(Exception e){ manager.getTransaction().rollback(); } }

public void remove(Class clazz, Long id){ T t = findById(clazz, id); try{ manager.getTransaction().begin(); manager.remove(t); manager.getTransaction().commit(); }catch (Exception e) { manager.getTransaction().rollback(); } }

}

o que teria que mudar na dao

ao modificar para persist

Erro :

Exception in thread "main" java.lang.IncompatibleClassChangeError:

ao dar um clean no maven

Erro: Não foi possível localizar nem carregar a classe principal

Você poderia listar as libs + versão presentes no seu buildpath?

Além disso, tente dar um clean NO PROJETO (project > clean)

pom,xml

4.0.0 br.com.empresa empresa 0.0.1-SNAPSHOT org.primefaces primefaces 5.1 compile org.hibernate hibernate-core 5.2.0.Final org.hibernate hibernate-entitymanager 5.2.8.Final org.hibernate.javax.persistence hibernate-jpa-2.0-api 1.0.1.Final org.primefaces.themes bootstrap 1.0.10 org.ajax4jsf ajax4jsf 1.0.5 org.postgresql postgresql 9.4-1206-jdbc42 org.wildfly wildfly-feature-pack 9.0.0.Final pom provided org.webjars font-awesome 4.7.0 org.javassist javassist 3.22.0-CR2 javax.el el-api 2.2 provided javax.servlet javax.servlet-api 3.1.0 provided org.slf4j slf4j-log4j12 1.7.5 cglib cglib 2.2.2 asm asm-util 3.3.1 prime-repo PrimeFaces Maven Repository http://repository.primefaces.org default

Tenta colocar as dependências do hibernate na mesma versão. No caso, alterar a hibernate-core 5.2.0.Final pra hibernate-core 5.2.8.Final, pra ficar igual à hibernate-entitymanager

Apos fazer o que falou olha o erro

Exception in thread "main" java.lang.ExceptionInInitializerError at br.com.empreasa.DAO.DaoGenerico.(DaoGenerico.java:10) at br.com.empresa.testclasse.InsertApplication.main(InsertApplication.java:12) Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named PersistenciaPU at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39) at br.com.empresa.connection.ConnectionFactory.(ConnectionFactory.java:9) ... 2 more

Esse erro foi porque o nome da sua persistence que você tenta instanciar (PersistenciaPU) não está configurada no arquivo persistence.xml.

Esta la :

<?xml version="1.0" encoding="UTF-8"?>

org.hibernate.ejb.HibernatePersistence br.com.empresa.control.Usuario br.com.empresa.model.Pessoa br.com.empresa.model.ClientesFornecedores br.com.empresa.model.Empresa
<?xml version="1.0" encoding="UTF-8"?>

<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="PersistenciaPU">

        <!-- provedor/implementacao do JPA -->
         <!-- <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>-->
         <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <!-- entidade mapeada -->
        <class>br.com.empresa.control.Usuario</class>
        <class>br.com.empresa.model.Pessoa</class>
        <class>br.com.empresa.model.ClientesFornecedores</class>
        <class>br.com.empresa.model.Empresa</class>


        <properties>
            <!-- dados da conexao -->
                <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
                <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost/db" />
                <property name="javax.persistence.jdbc.user" value="postgres" />
                <property name="javax.persistence.jdbc.password" value="senha" />

             <!-- propriedades do hibernate -->
                <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
                <property name="hibernate.hbm2ddl.auto" value="update" />
                <property name="hibernate.show_sql" value="true" />
                <property name="hibernate.format_sql" value="true" />

             <!-- atualiza o banco, gera as tabelas se for preciso -->
              <property name="hibernate.hbm2ddl.auto" value="update" />

        </properties>
    </persistence-unit>
</persistence>

Isso é apenas a listagem dos modelos que o hibernate mapeia.

Poste o arquivo de persistence completo e tenha certeza que ela está na pasta META-INF, dentro da sua pasta source do projeto.

Caso não seja o caso da localização da pasta, tente mudar o provider pro

org.hibernate.jpa.HibernatePersistenceProvider

troquei .. cada hora um erro ,, Eterno kkkkk

Exception in thread "main" java.lang.AbstractMethodError
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:278)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:889)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at br.com.empresa.connection.ConnectionFactory.<clinit>(ConnectionFactory.java:9)
    at br.com.empresa.DAO.DaoGenerico.<clinit>(DaoGenerico.java:10)
    at br.com.empresa.testclasse.InsertApplication.main(InsertApplication.java:12)

Respira, 1,2, vamos tentar de novo.

Por sorte eu já tive um problema desse aí no trabalho. Coloque provided nas dependências no maven. Isso faz com que o tomcat ou qualquer outro servidor use as bibliotecas que você forneceu e não a dele. No meu caso isso apareceu porque a que ele tinha por padrão estava conflitando com as minhas, que ele estava ignorando.

No caso, ficaria assim, por exemplo:

<dependency>
    <groupId>xxxxx</groupId>
    <artifactId>xxxxx</artifactId>
    <version>xxxxxxx</version>
    <scope>provided</scope>
    </dependency>

add provided e não teve efeito , mesmo erro

add uma lib e olha a mensagem

Exception in thread "main" java.lang.IncompatibleClassChangeError: class org.hibernate.ejb.HibernatePersistence has interface org.hibernate.ejb.AvailableSettings as super class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader$CachingPersistenceProviderResolver.loadResolverClasses(PersistenceProviderResolverHolder.java:150)
    at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader$CachingPersistenceProviderResolver.<init>(PersistenceProviderResolverHolder.java:130)
    at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader.getPersistenceProviders(PersistenceProviderResolverHolder.java:88)
    at javax.persistence.Persistence.getProviders(Persistence.java:75)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
    at br.com.empresa.connection.ConnectionFactory.<clinit>(ConnectionFactory.java:9)
    at br.com.empresa.DAO.DaoGenerico.<clinit>(DaoGenerico.java:10)
    at br.com.empresa.testclasse.InsertApplication.main(InsertApplication.java:12)

agora

Exception in thread "main" java.lang.AbstractMethodError

Cara, acabou minhas ideias já hahaha

Esse erro de Exception in thread "main" java.lang.AbstractMethodError é por conta de conflito de bibliotecas. Como falei, já tinha dado comigo a um tempo atrás, infelizmente minha solução não funcionou com você.

Sugiro recomeçar o projeto e fazer uma coisa super simples e funcional e ir incrementando aos poucos (não sei de que se trata esse projeto aí), e sempre acrescentando as libs apenas quando necessário.

Valeu cara mesmo , vou ver aqui e te falo

mas mesmo assim valeu ajuda