SOLUÇÃO- Erro: No Persistence provider for EntityManager named

Bom dia!!

Estudando uns exemplos de JPA, percebi que muitos desenvolvedores iniciantes se deparam com um erro comum que já foi postado varias vezes aqui no GUJ, porém sem uma solução coerente:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named livraria at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32) at GeraTabelas.main(GeraTabelas.java:7)
ou seja, o erro informa que não existem Nenhum provedor de persistência para EntityManager chamado livraria, isso ocorre na maioria das vezes devido o arquivo persistence.xml
está no local errado, ou seja, em Projeto–>WebContent–>META-INF–>persistence.xml , quando na verdade deveria esta em src–>META-INF–>persistence.xml,
Então se não existir, cria-se uma pasta META-INF em src e adiciona o persistence.xml. Abaixo esta uma imagem de como fica a estrutura do projeto. Pronto espero ter ajudado!!!


2 curtidas

E como está o teu persistence?

persistence.xml

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

<persistence-unit name="livraria" transaction-type ="RESOURCE_LOCAL">
	<provider>org.hibernate.ejb.HibernatePersistence</provider>
	<class>br.com.k19.modelo.Editora</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:3306/K21_livraria_bd"/>
		<property name="javax.persistence.jdbc.user" value="root"/>
		<property name="javax.persistence.jdbc.password" value="root"/>
		
	</properties>
</persistence-unit>

[/code]

A sim, agora que eu entendi o motivo do seu post. Desculpe! :oops: :oops: :oops:

O problema maior é quando o netbeans é utilizado. A estrutura de pastas dele é diferente, nisso, muita gente toma toco! =/

véi na boa! A estrutura de diretórios tá certinha, mas o erro continua…

Amigo.

Conseguiu resolver o seu problema ?

Estou com o mesmo problema (http://www.guj.com.br/java/298292-no-persistence-provider-for-entitymanager-named-sample) e o meu arquivo persistence.xml tambem esta no lugar certo mas esta dando o mesmo erro que a sua aplicação esta dando tambem.

Sim, estava faltando a biblioteca jboss-transaction-api_1.1_spec-1.0.0.Final.jar

Tem um detalhe muito importante que não tinha prestado atenção .

<persistence-unit name="livraria" transaction-type ="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>br.com.k19.modelo.Editora</class> <properties> .......
No arquivo de persistencia tem o nome dele, que no caso do exemplo é “livraria” (<persistence-unit name=“livraria”).

E na criação da EntityManagerFactory deve colocar no nome do meu arquivo de persistencia, que no caso seria

com isso da certo se voce colocar qual que outro nome ele não vai encontrar o arquivo[code]

2 curtidas

ok… Uma das minhas dificuldades foram sanadas! Thanks! :stuck_out_tongue:
Agora uma outra dúvida.
Porque alguns usam o persistence.xml e outros usam o hibernate.cfg.xml?
Qual a diferença entre os dois?

Alguns tutoriais que peguei, está como "persistence.xml"
Em outros (da propria Jboss) está como hibernate.cfg.xml…

Isso é de acordo com a versão? Ou coisa do tipo? :roll:

[quote=alexandrenilton]ok… Uma das minhas dificuldades foram sanadas! Thanks! :stuck_out_tongue:
Agora uma outra dúvida.
Porque alguns usam o persistence.xml e outros usam o hibernate.cfg.xml?
Qual a diferença entre os dois?

Alguns tutoriais que peguei, está como "persistence.xml"
Em outros (da propria Jboss) está como hibernate.cfg.xml…

Isso é de acordo com a versão? Ou coisa do tipo? :roll: [/quote]persistence.xml é quando é usado o a API do jpa como base e algum provider. Provider é quem implementa a API do JPA: Hibernate, EclipseLink, Batoo e assim vai.

Ao utilizar hibernate.cfg.xml você estará utilizando apenas o Hibernate e não seria de fácil portabilidade. Nesses caso são onde utilizam as APIs próprias do Hibernate como Session, Criteria e assim vai.

Estou fazendo o msmo tutorial e tbm não estou conseguindo …

[code]

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

<persistence-unit name="crudjpaPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/crudjpa" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="marcos" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.format_sql" value="false"/>
    </properties>
</persistence-unit>

[/code]

Filtro

@WebFilter(servletNames={"Faces Servlet"})
public class JPAFilter implements Filter {
	
	EntityManagerFactory factory;

	@Override
	public void destroy() {
		this.factory.close();
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
		EntityManager entityManager = this.factory.createEntityManager();
		request.setAttribute("EntityManager", entityManager);
		entityManager.getTransaction().begin();
		
		chain.doFilter(request, response);
		
		try {
			entityManager.getTransaction().commit();
		} catch (Exception e) {
			entityManager.getTransaction().rollback();
		}finally{
			entityManager.close();
		}
		
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		this.factory = Persistence.createEntityManagerFactory("crudjpaPU");
		
	}

Estava acontecendo o mesmo problema comigo, mesmo com o persistence.xml dentro da pasta src/META-INF.

O que resolveu foi pegar os JARs mais atualizados hibernate no momento em: http://sourceforge.net/projects/hibernate/files/hibernate4/4.3.5.Final/hibernate-release-4.3.5.Final.zip/download

antlr-2.7.7.jar
avro-1.7.6.jar
commons-compress-1.5.jar
commons-io-2.1.jar
commons-lang-2.6.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.4.Final.jar
hibernate-core-4.3.5.Final.jar
hibernate-entitymanager-4.3.5.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
hibernate-search-engine-4.5.1.Final.jar
hibernate-search-orm-4.5.1.Final.jar
hibernate-validator-4.0.2.GA.jar
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.4.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.1_spec-1.0.1.Final.jar
jms-1.1.jar
jsr250-api-1.0.jar
jta-1.1.jar
lucene-core-3.6.2.jar
paranamer-2.3.jar
slf4j-api-1.6.1.jar
validation-api-1.0.0.GA.jar
xml-apis-1.3.03.jar

Aí funcionou blz!!

2 curtidas