Os procedimentos comentados funcionaram, menos este de alterar usando o Salvar.
public class Testes {
public static void main(String[] args)throws Exception {
/*
RepositorioCliente repositorioCliente = new RepositorioCliente();
Cliente cliente = new Cliente();
// Salvar
cliente.setNome("Bruce Benner");
cliente.setIdade(52);
repositorioCliente.salvar(cliente);
*/
// Listar
// List<Cliente> clientes = repositorioCliente.listarTodos();
//
// for(Cliente temp :clientes) {
// System.out.println(temp.getNome());
// }
/*
// Buscar por id
RepositorioCliente repositorioCliente = new RepositorioCliente();
Cliente cliente = repositorioCliente.obterPorId(2);
System.out.println(cliente.getNome());
*/
// Atualizar
RepositorioCliente repositorioCliente = new RepositorioCliente();
Cliente cliente = repositorioCliente.obterPorId(2);
cliente.setNome("dom pedro");
repositorioCliente.salvar(cliente);
System.out.println(cliente.getNome());
}
}
Deu erro:
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Mon Apr 09 18:41:14 BRT 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
abr 09, 2018 6:41:14 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
abr 09, 2018 6:41:14 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@6179e425] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Hibernate:
select
cliente0_.id as id1_0_0_,
cliente0_.idade as idade2_0_0_,
cliente0_.nome as nome3_0_0_
from
cliente cliente0_
where
cliente0_.id=?
abr 09, 2018 6:41:14 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://localhost/lojaHiber]
erro ao Salvar:Cannot begin Transaction on closed Session/EntityManager
dom pedro
Cliente.java
@Entity // procura a classe marcada // importar com javax.persistence.Entity;
@Table(name=“cliente”) // Se não especificar copia o nome da classe na tabela
public class Cliente {
// @Id marcando o campo que será a primary key, marcador único
// @GeneratedValue valor que será incrementado no Mysql
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="nome") // necessário para dizer a coluna da tabela gerada
private String nome;
@Column(name="idade")
private int idade;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
}// end class
RepositorioCliente.java
public class RepositorioCliente {
// Seria uma classe DAO, reponsável por persistir objeto no Baco de Dados
// CRUD Criar Listar Atualizar Deletar
// EntityManagerFactory Gerencia comunicação com BD
EntityManagerFactory emf;
// EntityManager faz as transações
EntityManager em;
public RepositorioCliente() {
emf = Persistence.createEntityManagerFactory("mottaPU"); // Aqui diz a unidade de persistência especificada no arquivo persistance.xml
em = emf.createEntityManager();
}
//
public Cliente obterPorId(int id) {
try {
em.getTransaction().begin();
Cliente cliente = em.find(Cliente.class, id);
em.getTransaction().commit();
emf.close();
return cliente;
} catch (Exception e) {
System.out.println(" erro ao buscar Id :" +e.getMessage());
}
return null;
}
public void salvar(Cliente cliente) {
try {
emf = null;
// Abrindo conexao com o BD
em.getTransaction().begin();
// merge de já existir cliente ele tenta atualizar, merge pode serusado para atualizar ou criar objeto novo
em.merge(cliente); // poderia ser em.persist(cliente);
// abaixo executa no BD
em.getTransaction().commit();
// fechando conexao
emf.close();
} catch (HibernateException e) {
//em.getTransaction().rollback();
System.out.println(" erro ao Salvar:" +e.getMessage());
}
}
public void remover(Cliente cliente) {
try {
em.getTransaction().begin();
//
em.remove(cliente);
//
em.getTransaction().commit();
emf.close();
} catch (Exception e) {
em.getTransaction().rollback();
System.out.println(" erro ao Salvar :" +e.getMessage());
}
}
// Listar
public List<Cliente> listarTodos(){
try {
em.getTransaction().begin();
// Abaixo importado do jaxa.persistance
Query consulta = em.createQuery("select cliente from Cliente cliente"); // Não é um SQL puro, é SQL do JPA // consulta JPA
// abaixo cria uma lista temporaria de clientes
List<Cliente> listaClientes = consulta.getResultList();
em.getTransaction().commit();
emf.close();
return listaClientes;
} catch (Exception e) {
System.out.println(" erro ao Listar :" +e.getMessage());
}
return null;
}
}// end class
Feito na pasta META-INF em srsc
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<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="mottaPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
<!-- Conexão com o banco de dados -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/lojaHiber" />
<property name="hibernate.connection.user" value="root" />
<property name="hibernate.connection.password" value="123" />
<!--<property name="hibernate.hbm2ddl.auto" value="create" /> create cria nova tab/ update atualiza a que já existe-->
<property name="hibernate.hbm2ddl.auto" value="update"/>
<!--Configuracoes de Debug-->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="use_sql_comments" value="true" />
</properties>
</persistence-unit>
</persistence>