Como fazer um update e um delete usando JPA com Hibernate

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.

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?