日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JPA-EntityManager.merge()

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。