Problemas com o EntityManagerFactory no Hibernate

20 respostas
wellingtonamaralleit

Pessoal, estou com este problema que não estou conseguindo fazer um armazenamento simples no banco com o hibernate.

Meu persistence.xml está assim:

<?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="lojavirtual"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<class>entities.Produto</class> 
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" /> 
<property name="hibernate.show_sql" value="true" /> 
<property name="hibernate.format_sql" value="true" />  

<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/lojavirtual" /> 
<property name="javax.persistence.jdbc.user" value="root" /> 
<property name="javax.persistence.jdbc.password" value="mysql" /> 
</properties> 
</persistence-unit> 
</persistence>

Minha classe com a inserção é a seguinte:

//TestaInsereProduto.java 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import entities.Produto;

public class TestaInsereProduto {  
	public static void main(String[] args) { 
		
		
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("lojavirtual"); 
		System.out.println("1");
		EntityManager em = factory.createEntityManager();  
		
		Produto p = new Produto(); 
		p.setNome("camiseta"); 
		p.setPreco(12.23);  
		
		em.getTransaction().begin();  
		em.persist(p);  
		em.getTransaction().commit(); 
		} 
	}

Gera esse erro aqui:

[color=red]Exception in thread main java.lang.NoClassDefFoundError: org/hibernate/MappingNotFoundException

at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:124)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)

at testes.TestaInsereProduto.main(TestaInsereProduto.java:14)

Caused by: java.lang.ClassNotFoundException: org.hibernate.MappingNotFoundException

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)

 4 more[/color]

Se alguém poder me ajudar eu agradeço.

20 Respostas

C

wellingtonamaralleitao,

Não esta faltando fazer o o LOOKUP.

wellingtonamaralleit

Como faço esse lookup? Estou iniciando em JPA.

C

Colega, qual servidor de aplicação, voce esta usando?

Polverini

opa da uma lida no erro ai

java.lang.NoClassDefFoundError: org/hibernate/MappingNotFoundException

colocou o jar do hibernate jpa ai ??? algo assim hibernate-jpa-2.0-api-1.0.0.Fina.jar

wellingtonamaralleit

Apache Tomcat

wellingtonamaralleit

Polverini:
opa da uma lida no erro ai

java.lang.NoClassDefFoundError: org/hibernate/MappingNotFoundException

colocou o jar do hibernate jpa ai ??? algo assim hibernate-jpa-2.0-api-1.0.0.Fina.jar

Coloquei.

Polverini

Pelo que to vendo o tomcat nao ta achando a classe informada, problema de lookup é quando usa JTA, que pelo PU que vc postou não tem JTA.

qual a versão do hibernate ? ta usando mapeamento via hbm.xml ?

wellingtonamaralleit

To usando o Hibernate 3.0

AlencarCanton

Opa,beleza Wellington?

Olha pelo que eu vi,ta faltando a porta no endereço do banco,a sua linha atualmente no persistence.xml está assim:

tente assim:

3306 é a porta padrão,se estiver usando outra porta,substitua pela porta certa.

Olha,eu n mapeio minhas entidades no persistence.xml não,me refiro a essa linha:

Eu faço da seguinte forma,vou até as propriedades no projeto dentro do eclipse(só clicar no projeto e depois alt+enter),depois disso vc clica em Java Persistence ou JPA,depois marque a opção Discover annotated classes automatically,mas para que você veja o menu Java Persistence,é necessário ir antes em Project Facets e marcar o checkbox do JPA,dessa forma vc pode retirar as linhas de mapeamento de Entidade do arquivo persistence.xml
Abraço!

wellingtonamaralleit

Alencar valeu aí pela ajuda, mas agora está dando outro erro kkkkk

No Persistence provider for EntityManager named lojavirtual

Sendo que já criei no banco o database lojavirtual.

AlencarCanton

seu persistence.xml está no diretório src/META-INF ?
Poste o nome de todos os jars que estão no seu projeto,pode estar faltando alguma dependência.

wellingtonamaralleit

AlencarCanton:
seu persistence.xml está no diretório src/META-INF ?
Poste o nome de todos os jars que estão no seu projeto,pode estar faltando alguma dependência.

[img]

[/img]


AlencarCanton

O jar que contém a classe HibernatePersistence é o hibernate-entitymanager.jar,pode fazer o download dele aqui:
http://www.java2s.com/Code/Jar/h/Downloadhibernateentitymanagerjar.htm
colocar no projeto e tentar.

Além disso,vc tá usando o tomcat,ele não faz o controle das transações pra vc(não provê transação automática),então coloque o valor “RESOURCE_LOCAL” para a propriedade “transaction-type” na persistence unit.
Dessa forma:

<persistence-unit name="lojavirtual" transaction-type="RESOURCE_LOCAL">

abraço!

wellingtonamaralleit

Pô cara valeu mesmo aí a força mas ainda não deu certo :\ Mas tipo antes ele não estava nem indo para a main agora tá fazendo o primeiro print que coloquei pra testar mas não chega no segundo está parando nessa linha aqui:

EntityManagerFactory factory = Persistence.createEntityManagerFactory("lojavirtual");
AlencarCanton

confere se o persistence.xml está nos diretórios:

src/META-INF e WEB-INF\classes\META-INF(esse segundo dentro da pasta do tomcat SEU_TOMCAT/webapps/SEU_PROJETO/)

wellingtonamaralleit

Ah cara agora que estou percebendo que fiz uma certa confusão no começo do post, deu a entender que a aplicação era web, mas não, é um simples desktop mesmo o persistence.xml está no src/META-INF sim, mas não existe WEB-INF na hierarquia de diretórios.

AlencarCanton

Wellington,procure outro tutorial e reescreva seu persistence.xml todo,ok?
se não der certo,poste aqui de novo o erro e vamos tentar outra estratégia.
abraço!

wellingtonamaralleit

Alencar obrigado pela ajuda vou dar uma olhada em outros tutoriais sim vlw!

rhawan

Weligton, você está mapeando a classe Produto com as anotações do JPA?

wellingtonamaralleit

Cara o único mapeamento a classe produto que estou fazendo é no properties assim:

<class>entities.Produto</class>

Não entendi se é isso que está perguntando, abraços!

Criado 13 de março de 2013
Ultima resposta 18 de mar. de 2013
Respostas 20
Participantes 5