Your question doesn’t contain many details, but I think I know what ails you:
This utility class must be the Persistence Factory with the database, where it will receive a persistence unit from the persistence.xml
:
Ex01:
the class name issue is optional, as I use the JPA specification, my class name is JPAUtil
yours is called HibernateUtil
.
package br.com.financas.util;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtil {
private static EntityManagerFactory entityManagerFactory = Persistence
.createEntityManagerFactory("financas");
public EntityManager getEntityManager() {
return entityManagerFactory.createEntityManager();
}
}
Note that "financas" is the persistence-Unit name of the persistence.xml file;
The following is an execution class, where I enter objects and make transactions with the bank:
Ex02:
note that I am looking for the instance of EntityManager
through the class JPAUtil
, in that part of the code: (EntityManager manager = new JPAUtil().getEntityManager();
);
package br.com.financas.util;
import java.math.BigDecimal;
import java.util.Calendar;
import javax.persistence.EntityManager;
import br.com.financas.modelo.Conta;
import br.com.financas.modelo.Movimentacao;
import br.com.financas.modelo.TipoMovimentacao;
public class PopulaBanco {
public static void main(String[] args) {
EntityManager manager = new JPAUtil().getEntityManager();
manager.getTransaction().begin();
Conta conta1 = new Conta();
Conta conta2 = new Conta();
Conta conta3 = new Conta();
Conta conta4 = new Conta();
Conta conta5 = new Conta();
conta1.setBanco("001 - BANCO DO BRASIL");
conta1.setNumero("16987-8");
conta1.setAgencia("6543-0");
conta1.setTitular("Maria dos Santos");
conta2.setBanco("237 - BANCO BRADESCO");
conta2.setNumero("86759-1");
conta2.setAgencia("1745");
conta2.setTitular("Paulo Roberto Souza");
conta3.setBanco("341 - BANCO ITAU UNIBANCO");
conta3.setNumero("46346-3");
conta3.setAgencia("4606");
conta3.setTitular("Antonio Duraes");
conta4.setBanco("033 - BANCO SANTANDER");
conta4.setNumero("12345-6");
conta4.setAgencia("9876-0");
conta4.setTitular("Leandra Marques");
conta5.setBanco("104 - CAIXA ECONOMICA FEDERAL");
conta5.setNumero("987654-3");
conta5.setAgencia("1234");
conta5.setTitular("Alexandre Duarte");
// persistindo as contas
manager.persist(conta1);
manager.persist(conta2);
manager.persist(conta3);
manager.persist(conta4);
manager.persist(conta5);
// Movimentacoes da conta1
Movimentacao movimentacao1 = new Movimentacao();
Movimentacao movimentacao2 = new Movimentacao();
Movimentacao movimentacao3 = new Movimentacao();
Movimentacao movimentacao4 = new Movimentacao();
movimentacao1.setData(Calendar.getInstance());
movimentacao1.setDescricao("Conta de luz - ABRIL/2012");
movimentacao1.setValor(new BigDecimal("135"));
movimentacao1.setTipoMovimentacao(TipoMovimentacao.SAIDA);
movimentacao1.setConta(conta1);
manager.persist(movimentacao1);
movimentacao2.setData(Calendar.getInstance());
movimentacao2.setDescricao("Almoco no Restaurante - AGOSTO/2012");
movimentacao2.setValor(new BigDecimal("175.80"));
movimentacao2.setTipoMovimentacao(TipoMovimentacao.SAIDA);
movimentacao2.setConta(conta1);
manager.persist(movimentacao2);
movimentacao3.setData(Calendar.getInstance());
movimentacao3.setDescricao("Aluguel - MAIO/2012");
movimentacao3.setValor(new BigDecimal("680.00"));
movimentacao3.setTipoMovimentacao(TipoMovimentacao.ENTRADA);
movimentacao3.setConta(conta1);
manager.persist(movimentacao3);
movimentacao4.setData(Calendar.getInstance());
movimentacao4.setDescricao("Salario - FEVEREIRO/2012");
movimentacao4.setValor(new BigDecimal("3830.68"));
movimentacao4.setTipoMovimentacao(TipoMovimentacao.ENTRADA);
movimentacao4.setConta(conta1);
manager.persist(movimentacao4);
// Movimentacoes da conta2
Movimentacao movimentacao5 = new Movimentacao();
Movimentacao movimentacao6 = new Movimentacao();
movimentacao5.setData(Calendar.getInstance());
movimentacao5.setDescricao("Conta de telefone - SETEMBRO/2011");
movimentacao5.setValor(new BigDecimal("168.27"));
movimentacao5.setTipoMovimentacao(TipoMovimentacao.SAIDA);
movimentacao5.setConta(conta2);
manager.persist(movimentacao5);
movimentacao6.setData(Calendar.getInstance());
movimentacao6.setDescricao("Aniversario - MAIO/2011");
movimentacao6.setValor(new BigDecimal("200"));
movimentacao6.setTipoMovimentacao(TipoMovimentacao.ENTRADA);
movimentacao6.setConta(conta2);
manager.persist(movimentacao6);
// Movimentacoes da conta3
Movimentacao movimentacao7 = new Movimentacao();
Movimentacao movimentacao8 = new Movimentacao();
Movimentacao movimentacao9 = new Movimentacao();
movimentacao7.setData(Calendar.getInstance());
movimentacao7.setDescricao("Lanche - JULHO/2011");
movimentacao7.setValor(new BigDecimal("28.50"));
movimentacao7.setTipoMovimentacao(TipoMovimentacao.SAIDA);
movimentacao7.setConta(conta3);
manager.persist(movimentacao7);
movimentacao8.setData(Calendar.getInstance());
movimentacao8.setDescricao("Presente - DEZEMBRO/2011");
movimentacao8.setValor(new BigDecimal("49.99"));
movimentacao8.setTipoMovimentacao(TipoMovimentacao.SAIDA);
movimentacao8.setConta(conta3);
manager.persist(movimentacao8);
movimentacao9.setData(Calendar.getInstance());
movimentacao9.setDescricao("Bonus - JANEIRO/2012");
movimentacao9.setValor(new BigDecimal("2000"));
movimentacao9.setTipoMovimentacao(TipoMovimentacao.ENTRADA);
movimentacao9.setConta(conta3);
manager.persist(movimentacao9);
// Movimentacoes da conta4
Movimentacao movimentacao10 = new Movimentacao();
movimentacao10.setData(Calendar.getInstance());
movimentacao10.setDescricao("Carnaval - MARCO/2012");
movimentacao10.setValor(new BigDecimal("765.20"));
movimentacao10.setTipoMovimentacao(TipoMovimentacao.SAIDA);
movimentacao10.setConta(conta4);
manager.persist(movimentacao10);
// Movimentacoes da conta5
Movimentacao movimentacao11 = new Movimentacao();
Movimentacao movimentacao12 = new Movimentacao();
movimentacao11.setData(Calendar.getInstance());
movimentacao11.setDescricao("Salario - ABRIL/2012");
movimentacao11.setValor(new BigDecimal("2651.90"));
movimentacao11.setTipoMovimentacao(TipoMovimentacao.ENTRADA);
movimentacao11.setConta(conta5);
manager.persist(movimentacao11);
movimentacao12.setData(Calendar.getInstance());
movimentacao12.setDescricao("Bonus - JANEIRO/2012");
movimentacao12.setValor(new BigDecimal("1000"));
movimentacao12.setTipoMovimentacao(TipoMovimentacao.ENTRADA);
movimentacao12.setConta(conta5);
manager.persist(movimentacao12);
manager.getTransaction().commit();
manager.close();
}
}
the file persistence.xml
:
Ex03:
<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">
<!-- unidade de persistencia com o nome financas -->
<persistence-unit name="financas">
<!-- Implementação do JPA, no nosso caso Hibernate -->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- Aqui são listadas todas as entidades -->
<class>br.com.financas.modelo.Conta</class>
<class>br.com.financas.modelo.Movimentacao</class>
<properties>
<!-- Propriedades JDBC -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/financas" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="javax321" />
<!-- Configurações específicas do Hibernate -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
Okay, I think I got it in part. In the case of your examples, I saw that using JPA, as I am using Maven, would change a lot? Some other questions you had, you managed to answer me. However my main question here would be how to configure the persistence factory of Hibernate 5.2, because I saw that in this version the code of the class was different.
– Leandro Bellizzi
The Maven configuration doesn’t change anything, because it only says which dependencies you are using, for example, I use the JPA specification, but the Hibernate 5.3.9 (library) implementation in the project’s lib folder, in the case of Maven vc only writes in pom.xml the version of the library you would like to use, for example Hibernate 5.2 q it fetches in the dependencies repository.
– Marcos Sousa
The issue of the persistence factory... you are using the classes of Hibernate itself, including Hibernate.cfg.xml? In this case, you really need a specific configuration for this class, and I can publish it, but using this configuration is not recommended, to avoid high coupling. your code would be very dependent on the implementation of Hibernate, if someday you want to change provider, for Eclipselink for example, would be a huge headache.
– Marcos Sousa
ah, post your classes and configuration files.
– Marcos Sousa