2
respostas

Recuperar a conexão do banco de dados JPA.

Opa quero recuperar a conexão do meu banco de dados, estou usando jpa e hibernate na minha aplicação, teria como em algum lugar recuperar a conexão do banco?

import java.io.Serializable;

import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

@SuppressWarnings("serial")
public class JPAUtil implements Serializable{

    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("bercalini");

    @Produces
    @RequestScoped
    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void close(@Disposes EntityManager manager) {
        manager.close();
    }
 }
<?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="bercalini" 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/bercalini" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="admin" />

            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        </properties>
    </persistence-unit>
</persistence>

Tem como?

2 respostas

Olá Alisson,

Eu não entendi muito bem o que você quer fazer, mas pelo que eu vi do seu código, você criou um Factory via CDI que cria a conexão com o banco.

Para utiliza-la, bastaria você injetar a conexão em um atributo da classe onde você quer utilizar a conexão conforme exemplo abaixo:

@Inject
private EntityManager entityManager;

Alisson,

você tem um exemplo no arquivo PopulaBanco.java:

        EntityManager em = new JPAUtil().getEntityManager();

        em.getTransaction().begin();

        Autor assis = geraAutor("Machado de Assis");
        em.persist(assis);

        Livro casmurro = geraLivro("978-8-52-504464-8", "Dom Casmurro",
                "10/01/1899", 24.90, assis);
        Livro memorias = geraLivro("978-8-50-815415-9",
        em.persist(casmurro);
        em.persist(memorias);

        em.getTransaction().commit();
        em.close();

Você poderia usar a classe DAO também para as manipulações, como por exemplo:

this.livro = new DAO<Livro>(Livro.class).buscaPorId(this.livroId);
new DAO<Livro>(Livro.class).adiciona(this.livro);
new DAO<Livro>(Livro.class).atualiza(livro);
new DAO<Livro>(Livro.class).remove(livro);