JPA基础(七):使用JPA加载_更新_删除对象

我们目前使用的是Hibernate,实际上我们操纵EntityManager对象时,它内部是操纵了Hibernate里面的session对象,只是对session对象做了封装而已。

1     @Test
2 public void getPerson(){
3 EntityManagerFactory factory=Persistence.createEntityManagerFactory("sample");
4 EntityManager em=factory.createEntityManager();
5 Person p=em.find(Person.class, 1);//相当于Hibernate的get方法
6 System.out.println(p.getName());
7 em.close();
8 factory.close();
9 }

如果不存在id为1的Person时,返回null。

 

1     @Test
2 public void getPerson2(){
3 EntityManagerFactory factory=Persistence.createEntityManagerFactory("sample");
4 EntityManager em=factory.createEntityManager();
5 Person p=em.getReference(Person.class, 1);//相当于Hibernate的load方法,延迟加载
6 System.out.println(p.getName());
7 em.close();
8 factory.close();
9 }

 

 1     @Test
2 public void update(){
3 EntityManagerFactory factory=Persistence.createEntityManagerFactory("sample");
4 EntityManager em=factory.createEntityManager();
5 em.getTransaction().begin();
6 Person p=em.find(Person.class, 1);
7 p.setName("jame");//p处于持久态,所以直接更改,在事务提交时会与数据库进行同步
8 em.getTransaction().commit();
9 em.close();
10 factory.close();
11 }

 

 1     @Test
2 public void update2(){
3 EntityManagerFactory factory=Persistence.createEntityManagerFactory("sample");
4 EntityManager em=factory.createEntityManager();
5 em.getTransaction().begin();
6 Person p=em.find(Person.class, 1);
7 em.clear();////把实体管理器中的所有实体变成游离状态。
8 p.setName("jim");
9 em.merge(p);
10 em.getTransaction().commit();
11 em.close();
12 factory.close();
13 }

在clear之后,p变成了游离状态,这时候对游离状态的实体进行更新的话(p.setName("jim");),更新的数据是不能同步到数据库的。可以采用方法em.merge(p);这方法是用于把在游离状态时候的更新同步到数据库。

 1     @Test
2 public void delete(){
3 EntityManagerFactory factory=Persistence.createEntityManagerFactory("sample");
4 EntityManager em=factory.createEntityManager();
5 em.getTransaction().begin();
6 Person p=em.find(Person.class, 2);
7 em.remove(p);//删除的bean对象也必须是处于托管状态的对象才能被删除成功。
8 em.getTransaction().commit();
9 em.close();
10 factory.close();
11 }






posted @ 2011-11-30 21:37  一直在等  阅读(4906)  评论(1编辑  收藏  举报