我們目前使用的是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 }