[RESOLVIDO] Duvida JPA

Bom dia pessoal, comecei a ler o livro da casa do código “Aplicações Java para web com JSF e JPA”, porém estou com uma dificuldade.
Estou começando a aprender, então se for alguma coisa besta já peço desculpas.

Seguinte:

criei a classe Automovel:

> 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 Long getId() {
>         return id;
>     }
>     public void setId(Long id) {
>         this.id = id;
>     }
>     public String getMarca() {
>         return marca;
>     }
>     public void setMarca(String marca) {
>         this.marca = marca;
>     }
>     public String getModelo() {
>         return modelo;
>     }
>     public void setModelo(String modelo) {
>         this.modelo = modelo;
>     }
>     public Integer getAnoFabricacao() {
>         return anoFabricacao;
>     }
>     public void setAnoFabricacao(Integer anoFabricacao) {
>         this.anoFabricacao = anoFabricacao;
>     }
>     public Integer getAnoModelo() {
>         return anoModelo;
>     }
>     public void setAnoModelo(Integer anoModelo) {
>         this.anoModelo = anoModelo;
>     }
>     public String getObservacoes() {
>         return observacoes;
>     }
>     public void setObservacoes(String observacoes) {
>         this.observacoes = observacoes;
>     }
> }

a classe JPAUtil :

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

public class JPAUtil {
    
    private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("teste");
    
    public static EntityManager getEntityManager(){
        return emf.createEntityManager();
    }

}

A classe PersistidorDeAutomovel:

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

public class PersistidorDeAutomovel {
    public static void main(String[] args) {
        
    
        EntityManager em = JPAUtil.getEntityManager();
        
        Automovel auto = new Automovel();
        
        auto.setAnoFabricacao(2010);
        auto.setModelo("Ferrari");
        auto.setObservacoes("Nunca foi batido");
        
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        em.persist(auto);
        tx.commit();
        
        em.close();
    }

}

e o persistence.xml (utilizo banco de dados oracle 11g) :

<?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="teste">
    
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:/:@localhost:1521:xe"/>
            <property name="javax.persistence.jdbc.user" value="teste"/>
            <property name="javax.persistence.jdbc.password" value="1234"/>
            <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>    
                
        </properties>
        
    </persistence-unit>
</persistence>

E ao executar a classe PersistidorDeAutomovel, é lançada a seguinte exceção:

set 28, 2016 10:07:53 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
    name: teste
    ...]
set 28, 2016 10:07:53 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.2.2.Final}
set 28, 2016 10:07:53 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
set 28, 2016 10:07:53 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
set 28, 2016 10:07:53 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
set 28, 2016 10:07:53 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" java.lang.ExceptionInInitializerError
    at PersistidorDeAutomovel.main(PersistidorDeAutomovel.java:8)
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:267)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:231)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
    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:240)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
    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:847)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at JPAUtil.<clinit>(JPAUtil.java:7)
    ... 1 more
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [oracle.jdbc.driver.OracleDriver]
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:229)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.loadDriverIfPossible(DriverManagerConnectionProviderImpl.java:160)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildCreator(DriverManagerConnectionProviderImpl.java:116)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:100)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:72)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:240)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
    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:257)
    ... 15 more

Se alguém puder me ajudar, agradeço desde já.

É sempre bom vc dividir pra ver aonde está o problema, na criação do em ou na persistência.
A exceção fala da lib do oracle, dá uma olhada nela

1 curtida

Este trecho da exceção diz que a aplicação não conseguiu encontrar o driver definido: Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [oracle.jdbc.driver.OracleDriver]
Isso pode ocorrer por você não ter adicionado o jar contendo esta classe ao seu projeto ou por ter escrito o nome da classe incorretamente.
Acredito que a razão esteja na ausência da lib do oracle (ojdbc) em teu projeto.
Sabe como adicionar um jar como biblioteca em teu projeto?

1 curtida

Foi isso mesmo! Falta de atenção… tinha esquecido de colocar o jar.
Obrigado pela ajuda galera!