Unknown entity no hibernate [RESOLVIDO]

2 respostas
D

Oi pessoal. Estou começando a estudar o hibernate e me deparei com esta exception:

Exception in thread "main" java.lang.IllegalArgumentException: Unknown entity: com.htcursos.model.entity.Usuario
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:878)
	at JPAUtilTest.main(JPAUtilTest.java:22)

Já revisei o código todo e não encontrei nada diferente do tutorial que estou seguindo. Dei uma pesquisada e vi também na documentação que esta exception poderia ocorrer caso a annotation estivesse incorreta, mas conferi e está correta na classe Usuario.

Alguem tem alguma idéia?

Seguem ai as classes e xml's. A exception ocorre quando executo a classe JPAUtilTest

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;

@Entity
public class Usuario{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(name="seq_usu", initialValue=1)
	@GeneratedValue(generator="seq_usu", strategy=GenerationType.AUTO)
	private Long id;
	
	private String nome;
	
	private String email;
	
	private String senha;
        ...
        //getters e setters
}
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class JPAUtil {
	protected static EntityManagerFactory entityManagerFactory;
	protected static EntityManager entityManager;
	
	static{
		//instanciando a fabrica
		entityManagerFactory = Persistence.createEntityManagerFactory("persistence-util");
		//instanciando o gerenciador
		entityManager = entityManagerFactory.createEntityManager();
	};
	
	/**
	 * metodo que retorna um objeto EntityManager
	 * @return EntityManager
	 */
	public static EntityManager abreConexao(){
		
		return entityManager;
	}
}
import javax.persistence.EntityManager;

import com.htcursos.model.entity	.Usuario;
import com.htcursos.model.util.JPAUtil;

public class JPAUtilTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//instancia do gerenciador de entidades
		EntityManager em = JPAUtil.abreConexao();
		
		//objeto para ser persistido
		Usuario usuario = new Usuario();
		usuario.setNome("Diogo");
		usuario.setSenha("123");
		usuario.setEmail("diomsg");
		em.persist(usuario);

	}
}
<persistence version="1.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_1_0.xsd">

	<persistence-unit name="persistence-util" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<property name="hibernate.connection.username" value="postgres" />
			<property name="hibernate.password" value="postgres" />
			<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
			<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/cjweb3db" />
			<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
		</properties>

	</persistence-unit>


</persistence>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.htcursos</groupId>
	<artifactId>cjweb3</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>cjweb3</name>
	<description>curso java ee avançado</description>

	<properties>
		<hibernate.group>org.hibernate</hibernate.group>
		<hibernate.version>4.2.6.Final</hibernate.version>
		<slf4j.version>1.7.5</slf4j.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>${hibernate.group}</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${hibernate.version}</version>
		</dependency>

		<dependency>
			<groupId>${hibernate.group}</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>${hibernate.version}</version>
		</dependency>


		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

		<!-- Banco de dados -->
		<dependency>
			<groupId>postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<version>8.4-702.jdbc4</version>
		</dependency>

	</dependencies>
</project>

2 Respostas

Hebert_Coelho

Em seu persistence.xml adicione abaixo da tag algo como:

<provider>...</provider>
<class>COM.PACOTE.SUA_CLASSE</class>
D

Obrigado Hebert

Além do que você citou de correção ainda tinha a seguinte linha incorreta (correta abaixo) no persistence.xml

...
<property name="hibernate.connection.password" value="postgres" />  
...
Criado 29 de setembro de 2014
Ultima resposta 30 de set. de 2014
Respostas 2
Participantes 2