Erro ao executar programa com JPA

Olá, pessoal! Estou começando na programação Java e estou tendo um problema na execução de um código que utiliza o JPA. Já vi todas as orientações e dicas a respeito do assunto, o que parece uma coisa simples, entretanto meu código não funciona, e aparece as seguintes mensagens de erro:

    _mar 19, 2016 11:33:25 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation_
_    INFO: HHH000204: Processing PersistenceUnitInfo [_
_    	name: default_
_    	...]_
_    mar 19, 2016 11:33:25 AM org.hibernate.Version logVersion_
_    INFO: HHH000412: Hibernate Core {5.1.0.Final}_
_    mar 19, 2016 11:33:25 AM org.hibernate.cfg.Environment <clinit>_
_    INFO: HHH000206: hibernate.properties not found_
_    mar 19, 2016 11:33:25 AM org.hibernate.cfg.Environment buildBytecodeProvider_
_    INFO: HHH000021: Bytecode provider name : javassist_
_    mar 19, 2016 11:33:25 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>_
_    INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}_
_    mar 19, 2016 11:33:25 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure_
_    WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)_
_    Exception in thread "main" javax.persistence.PersistenceException: Unable to build entity manager factory_
_    	at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:66)_
_    	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)_
_    	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)_
_    	at PersistidorDeAutomovel.main(PersistidorDeAutomovel.java:11)_
_    Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]_
_    	at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)_
_    	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)_
_    	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)_
_    	at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)_
_    	at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)_
_    	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)_
_    	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)_
_    	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)_
_    	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)_
_    	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:848)_
_    	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:876)_
_    	at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)_
_    	... 3 more_
_    Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [com.mysql.jdbc.Driver]_
_    	at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:229)_
_    	at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.loadDriverIfPossible(DriverManagerConnectionProviderImpl.java:161)_
_    	at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildCreator(DriverManagerConnectionProviderImpl.java:117)_
_    	at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:73)_
_    	at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)_
_    	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)_
_    	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)_
_    	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)_
_    	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)_
_    	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)_
_    	at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)_
_    	at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234)_
_    	... 14 more_
_    Caused by: java.lang.ClassNotFoundException: Could not load requested class : com.mysql.jdbc.Driver_
_    	at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:217)_
_    	at java.lang.ClassLoader.loadClass(Unknown Source)_
_    	at java.lang.ClassLoader.loadClass(Unknown Source)_
_    	at java.lang.Class.forName0(Native Method)_
_    	at java.lang.Class.forName(Unknown Source)_
_    	at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:226)_
_    	... 25 more_

Estou usando a plataforma o Eclipse Java EE IDE for Web Developers - versão Mars 2 - realease 4.5.2;o Hibernate 5.1.0; o jdk1.8.0_73; e o MySQL 5.5. A seguir o código da classe de persistência:

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

@Entity
public class Automovel {
	@Id @GeneratedValue
	private Long id;
	private String marca;
	private String modelo;
	private Integer anoFabricacao;
	private Integer anoModelo;
	private String observacoes;
	
	public void setMarca (String marca){
		this.marca = marca;
	}
	
	public String getMarca (){
		return this.marca;
	}
	
	public void setModelo(String modelo){
		this.modelo = modelo;
	}
	
	public String getModelo(){
		return this.modelo;
	}
	
	public void setAnoFabricacao(Integer anoFabricacao){
		this.anoFabricacao = anoFabricacao;
	}
	
	public Integer getAnoFabricacao(){
		return this.anoFabricacao;
	}
	
	public void setAnoModelo(Integer anoModelo){
		this.anoModelo = anoModelo;
	}
	
	public Integer getAnoModelo(){
		return this.anoModelo;
	}
	
	public void setObservacoes (String observacoes){
		this.observacoes = observacoes;
	}
	
	public String getObservacoes(){
		return this.observacoes;
	}
	
}

Classe da aplicação que invoca a classe de persistência:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.EntityTransaction;


public class PersistidorDeAutomovel {

	public static void main(String[] args) {
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("default");
		emf.close();
		
	}

}

O arquivo persistence.xml está da seguinte forma:

<?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_2_0.xsd"
    		 version="2.0">
		
	<persistence-unit name="default">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>Automovel</class>	
		<properties>
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/automoveis" />
			<property name="javax.persistence.jdbc.user" value="root" />
			<property name="javax.persistence.jdbc.password" value="root" />
			
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />	
			
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
			
			<property name="hibernate.hbm2ddl.auto" value="update" />
			
		</properties>
	</persistence-unit>
	
</persistence>

Já conferi as pastas, e o arquivo persistence.xml está dentro da pasta …scr\META-INF.

Aparentemente é algo simples, entretanto não consigo não fazer funcionar! Alguém poderia me dar uma ajuda?

Grato.

Ola @Gfml na sua classe “PersistirdorDeAutomovel” esta faltando coisa ,

ela tem que ficar assim

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.EntityTransaction;


public class PersistidorDeAutomovel {

	public static void main(String[] args) {
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("default");
           EntityManager entityManager = emf.createEntityManager();

          entityManager.getTransaction().begin();

              Automovel  fusca =  new  Automovel();

               fusca.setMaca("xxxxx");
               ...............

            entityManager.persist(fusca);

           entityManager.getTransaction().commit();

		emf.close();
		
	}

}

Caro Daniel_Dias, obrigado pela ajuda! Eu já implementei a EntityManager e demais expressões para persistência da classe Automovel. Não coloquei todo código para não ficar extenso. Pois, o erro acontece exatamente no momento em que a classe EntityManagerFactory é instanciada. A execução do código não passa desta expressão.

Você incluir o Jar do drive do MySQL ?

1 curtida

Valew, BlackDog! :clap: Realmente, era isso! Incluí o Jar do conector MySQL na WEB-INF/lib (mysql-connector-java-5.1.38-bin.jar) e funcionou.

Grato.

1 curtida