Olá, peguei esse excelente material para fazer os testes do JPA com Hibernate:
http://blog.caelum.com.br/video/jpa/beginning-with-jpa.html
Fiz os exemplos de insert e find, porém nesse video ficou faltando os exemplos de update e delete, alguém poderia me dar esse help?
Insert
public class SaveUser {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa_hibernate");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Usuario usuario = new Usuario();
usuario.setLogin("login");
usuario.setName("fabio pedrosa" );
usuario.setPassword("teste123 ");
em.persist(usuario);
em.getTransaction().commit();
em.close();
emf.close();
}
}
Find
public class LoadUser {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa_hibernate");
EntityManager em = emf.createEntityManager();
Usuario usuario = em.find(Usuario.class, 19L);
System.out.println(usuario.getName());
System.out.println(usuario.getLogin());
System.out.println(usuario.getPassword());
em.close();
emf.close();
}
}
[color=darkblue] O update eu pego a session e utilizo o comando de update:[/color]
Mais aqui não estou usando só Hibernate, funciona do mesmo jeito com JPA?
vc pode usar o merge do seu EntityManager
[color=darkblue] Você pode usar o Entity, acredito que seria o processo semelhante ao EJB, você passa as chaves da consulta, se retornar algo ele gera uma Exception.
Fazendo o tratamento da Exception você pode retornar o Objeto, assim você seta os parâmetros que deseja para atualizar esse objeto, podendo excluir também [/color]
http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/ejb/cmp.htm
da uma olhada neste post, e baixa o exemplo de JPA …
http://www.urubatan.com.br/2007/05/24/exemplos-dos-exercicios-dos-cursos-de-jpa-e-jsf-ajuda-no-tema-de-casa-dos-alunos/
tem isto entre oturas coisas …
mas basicamente, o update é só tu chamr o metodo merge do EntityManager, e o delete, tu chama o metodo remove …
se tu tiver só o ID, busca uma referencia para o objeto utilizando getReference
Perfeito urubatan, estou querendo me aprofundar no assunto, o que você indicaria como referência?
Resultado dos testes:
Delete:
public class DeleteUser {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa_hibernate");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.remove(em.getReference(Usuario.class, 19L));
em.getTransaction().commit();
em.close();
emf.close();
}
}
Update:
public class UpdateUser {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa_hibernate");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Usuario usuario = new Usuario();
usuario.setId(20L);
usuario.setLogin("login alterado");
usuario.setName("nome alterado");
usuario.setPassword("password alterado");
em.merge(usuario);
em.getTransaction().commit();
em.close();
emf.close();
}
}
Agora se eu tivesse mais que o id como eu faria essas transações?
Achei uma boa referência:
http://docs.solarmetric.com/full/html/ejb3_langref.html
E para finalizar segue um exemplo de Listagem:
public class ListUser {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa_hibernate");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Query q = em.createQuery("select u from Usuario u where u.id > 20");
List<Usuario> usuarios = q.getResultList();
for (Usuario usuario : usuarios) {
System.out.println(usuario.getLogin());
System.out.println(usuario.getName());
}
tx.commit();
em.close();
emf.close();
}
}
Quem já esta desenvolvendo JPA em projetos reais?
Mais uma vez o fórum do GUJ me salva de uma dúvida, pude aproveitar o post do pedrosa pra aprender com proceder com o update e delete com o hibernate.
Testei os códigos e tudo funfou blz… vlw aew pessoal.
leonpf
Novembro 10, 2010, 9:55am
#10
Boa, vlw galera me ajudou muito esse tópico.
^^
Pessoal alguém já passou por org.hibernate.PersistentObjectException: detached entity passed to persist: nomepacote.nomeclasse?