[RESOLVIDO] Hibernate + Persistence.xml inválido + Maven

Boa noite

Gostaria de pedir ajuda para fazer o hibernate rodar. Estou começando a aprender agora como se utiliza esta ferramenta e não consigo faze-la funcionar de jeito nenhum, agora está dando o seguinte erro:

0 [main] INFO  org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
14 [main] INFO  org.hibernate.Version - HHH000412: Hibernate Core {4.1.4.Final}
19 [main] INFO  org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
22 [main] INFO  org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
Exception in thread "main" javax.persistence.PersistenceException: Invalid persistence.xml.
Error parsing XML (line-1 : column -1): cvc-elt.1: Cannot find the declaration of element 'persistence'.

	at org.hibernate.ejb.packaging.PersistenceXmlLoader.loadURL(PersistenceXmlLoader.java:147)
	at org.hibernate.ejb.packaging.PersistenceXmlLoader.deploy(PersistenceXmlLoader.java:171)
	at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:324)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
	at dao.DAOFactory.<init>(DAOFactory.java:161)
	at dao.DAOFactory.getInstance(DAOFactory.java:198)
	at forms.FrmPrincipal.pTabela(FrmPrincipal.java:78)
	at forms.FrmPrincipal.<init>(FrmPrincipal.java:61)
	at forms.FrmPrincipal.main(FrmPrincipal.java:50)

O meu arquivo persistence.xml possui o seguinte código:

<?xml version="1.0" encoding="UTF-8"?>
<persistence>
	<!--Nome do contexto que configura o Provedor de Persistência -->
	<persistence-unit name="projeto2">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<!--String Conexao com o banco de dados -->
			<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/projeto2
			</property>
			<!--Dialeto entendido pelo banco -->
			<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect
			</property>
			<!--Driver JDBC para acesso ao banco -->
			<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
			<property name="hibernate.connection.username">juba</property>
			<property name="hibernate.connection.password">270787</property>
			<!--Metodo de atualizacao -->
			<property name="hibernate.hbm2ddl.auto">update</property>
			<property name="hibernate.show_sql" value="true" />
		</properties>
	</persistence-unit>
</persistence>

Como citei estou utilizando o Maven, portanto não sei com certeza em que diretório, se isto influenciar, devo colocar o arquivo persistence.xml, no caso estou o colocando em :

src/main/resources/META-INF/persistence.xml

E possuo as seguintes dependencias no projeto:

<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate</artifactId>
			<version>3.6.0.Beta2</version>
			<type>pom</type>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.6.6</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.20</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>4.1.4.Final</version>
		</dependency>
		<dependency>
			<groupId>org.javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.16.1-GA</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>apache-log4j-extras</artifactId>
			<version>1.1</version>
			<type>bundle</type>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
			<type>bundle</type>
		</dependency>
		<dependency>
			<groupId>org.hibernate.javax.persistence</groupId>
			<artifactId>hibernate-jpa-2.1-api</artifactId>
			<version>1.0.0.Draft-6</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>4.1.4.Final</version>
		</dependency>

Agradeço a qualquer um que possa dar uma ajuda.

Juba

Seu persistence tem que ficar em src/META-INF/persistence.xml

Bom dia parceiro, tentei mas continuei na mesma. Porém, conforme você tinha falado sobre a localização do arquivo eu o retirei da META-INF para testar, daí o erro mudou:


Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named projeto2
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
	at dao.DAOFactory.<init>(DAOFactory.java:161)
	at dao.DAOFactory.getInstance(DAOFactory.java:198)
	at forms.FrmPrincipal.pTabela(FrmPrincipal.java:78)
	at forms.FrmPrincipal.<init>(FrmPrincipal.java:61)
	at forms.FrmPrincipal.main(FrmPrincipal.java:50)

Então acho que é alguma coisa com o persistence.xml mesmo.

Valeu pela ajuda.

Boa tarde,

Descobri que o meu erro se encontrava mesmo no arquivo persistence.xml, o modelo que eu estava utilizando estava errado, sendo assim o correto:

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1_0.xsd" version="1.0">
	<!--Nome do contexto que configura o Provedor de Persistencia -->
	<persistence-unit name="projeto2">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<!--String Conexao com o banco de dados -->
			<property name="hibernate.connection.url" value ="jdbc:mysql://localhost:3306/projeto2"/>
			<!--Dialeto entendido pelo banco -->
			<property name="hibernate.dialect"  value = "org.hibernate.dialect.MySQL5InnoDBDialect"/>
			<!--Driver JDBC para acesso ao banco -->
			<property name="hibernate.connection.driver_class" value = "com.mysql.jdbc.Driver"/>
			<property name="hibernate.connection.username" value="juba"/>
			<property name="hibernate.connection.password" value ="270787"/>
			<!--Metodo de atualizacao -->
			<property name="hibernate.hbm2ddl.auto" value = "update"/>
			<property name="hibernate.show_sql"  value = "true"/>
		</properties>
	</persistence-unit>
</persistence>

Mais uma vez, valeu jakefrog pela ajuda

Inté…

Juba

1 curtida

Olá, Senhores.

Estou em uma situação bastante parecida. Criei o projeto Maven através do archtype javax.faces-war-archetype, daí adicionei todo o conteúdo de um projeto que já funciona e que foi criado no formato web pelo eclipse.

Para poder adicioná-lo ao servidor, tive que dar um mvn eclipse:eclipse -Dwtpversion=2.0

Até aí tudo bem. A aplicação foi iniciada, mas o modelo do meu banco de dados não foi criado. Fui até a pasta target/projetoMavenWeb/META-INF e observei que não existe o persistence.xml lá, mesmo já tendo feito o mvn package.

Alguém já passou por uma situação dessa ou parecida e possa ajudar?

Blz Fernando Mateus,

Seguinte parceiro, aparentemente (não sou grande conhecedor do Maven) o teu problema está em onde você está pondo a pasta Meta-Inf. Por exemplo, em uma aplicação desktop, você tem deixar a pasta da “resources” senão dá o mesmo problema. Procura ver no teu archtype qual é a pasta onde você põe a Meta-Inf, por exemplo em um projeto com struts+spring+hibernate+maven a minha pasta Meta-Inf fica em src/main/webapp (no mesmo nível da Web-Inf).

Espero ter ajudado.

Inté…