JPA-EntityManager.merge()
生活随笔
收集整理的這篇文章主要介紹了
JPA-EntityManager.merge()
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
EntityManager#merge
merge() 用于處理 Entity 的同步。即數據庫的插入和更新操作
merge的幾種情況
1. 若傳入的是一個臨時對象
package jpa.test;import com.jpa.entity.Customer; import org.junit.After; import org.junit.Before; import org.junit.Test;import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import java.util.Date;public class MergeTest {private EntityManagerFactory entityManagerFactory;private EntityManager entityManager;private EntityTransaction transaction;@Beforepublic void init() {entityManagerFactory = Persistence.createEntityManagerFactory("jpaname");entityManager = entityManagerFactory.createEntityManager();transaction = entityManager.getTransaction();transaction.begin();}@Afterpublic void destroy() {transaction.commit();entityManager.close();entityManagerFactory.close();}// 1. 若傳入的是一個臨時對象// 會創建一個新的對象, 把臨時對象的屬性復制到新的對象中, 然后對新的對象執行持久化操作// 所以新的對象中有 id, 但以前的臨時對象中沒有 id @Testpublic void testMerge1() {Customer customer = new Customer();customer.setAge(18);customer.setBirth(new Date());customer.setCreatedTime(new Date());customer.setEmail("cc@163.com");customer.setLastName("CC");Customer customer2 = entityManager.merge(customer);System.out.println("customer#id:" + customer.getId());System.out.println("customer2#id:" + customer2.getId());} }2.若傳入的是一個游離對象, 即傳入的對象有 OID
// 2.若傳入的是一個游離對象, 即傳入的對象有 OID // 若在 EntityManager 緩存中沒有該對象 // 若在數據庫中也沒有對應的記錄 // JPA 會創建一個新的對象, 然后把當前游離對象的屬性復制到新創建的對象中 // 對新創建的對象執行 insert 操作 @Test public void testMerge2() {Customer customer = new Customer();customer.setAge(18);customer.setBirth(new Date());customer.setCreatedTime(new Date());customer.setEmail("dd@163.com");customer.setLastName("DD");customer.setId(100);Customer customer2 = entityManager.merge(customer);System.out.println("customer#id:" + customer.getId());System.out.println("customer2#id:" + customer2.getId()); }?3.若傳入的是一個游離對象, 即傳入的對象有 OID,在數據庫中有對應的記錄
// 3.若傳入的是一個游離對象, 即傳入的對象有 OID,在數據庫中有對應的記錄 // 在 EntityManager 緩存中沒有該對象 // JPA 會查詢對應的記錄, 然后返回該記錄對一個的對象, 再然后會把游離對象的屬性復制到查詢到的對象中 // 對查詢到的對象執行 update 操作 @Test public void testMerge3(){Customer customer = new Customer();customer.setAge(18);customer.setBirth(new Date());customer.setCreatedTime(new Date());customer.setEmail("ee@163.com");customer.setLastName("EE");customer.setId(4);Customer customer2 = entityManager.merge(customer);System.out.println(customer == customer2); //false }4.若傳入的是一個游離對象, 即傳入的對象有 OID,在 EntityManager 緩存中有對應的對象
// 4.若傳入的是一個游離對象, 即傳入的對象有 OID,在 EntityManager 緩存中有對應的對象 // JPA 會把游離對象的屬性復制到查詢到 EntityManager 緩存中的對象中 // EntityManager 緩存中的對象執行 UPDATE @Test public void testMerge4(){Customer customer = new Customer();customer.setAge(18);customer.setBirth(new Date());customer.setCreatedTime(new Date());customer.setEmail("dds@163.com");customer.setLastName("DD");customer.setId(4);Customer customer2 = entityManager.find(Customer.class, 4);entityManager.merge(customer);System.out.println(customer == customer2); //false }?
轉載于:https://www.cnblogs.com/jhxxb/p/10361051.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的JPA-EntityManager.merge()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海康—SADP激活(设备网络搜索)
- 下一篇: java将数据生成csv文件