簡體   English   中英

jpa:如何在java se開發中使用jpa

[英]jpa : how to use jpa in java se development

我正在使用java的java se項目進行工作,以使用數據庫持久化數據。

現在,我為每個數據庫操作獲取一個新的實體管理器,並在函數調用結束時將其關閉。 喜歡

public void save(T entity){
  em = getNewEntity();
  em.persisty(entity);
  em.close;
}

但是很難處理多對多關系。 例如
我有一個與B實體有多對多關系的A實體。 他們有CascadeType.MERGE。

一旦我創建A,我就創建B,並運行多個線程來為A和B生成信息。但是有時B保持A的過時,如果我合並B則A的數據將被清除。

例如 。 A是音樂,B是音樂專輯,因此一個B將具有A列表。 另一個線程將讀取音樂元數據並獲取音樂標簽信息並更新A,當在FS中找到新的A時,B將更新。
由於實體管理器已關閉,因此B的A列表中的實體已過期,這意味着當A更新自身時,B不知道A更新了。 合並B后,jpa將幫助我們使用B的A列表中的實體合並A。

為了解決此問題,我決定使用一個實體管理器,並將所有數據庫操作放到一個線程中。 然后出現了新問題。

當交易處於活動狀態並且應該為實體之間的交易打開時

transaction.begin();
....
transaction.end();

但是,有許多線程正在運行,這些線程也可能會更改實體。

我的問題是:如何在Java SE開發中使用jpa? 謝謝

如果關系不同步,則不能責怪JPA。 保持關系理智是應用程序的責任。

在JPA中,通常與Java中一樣,由應用程序或對象模型負責維護關系。

資源

正如@home所說,您需要正確同步。

話雖這么說,EntityManager不是線程安全的,所以您需要以某種方式解決此問題。 同步您的應用程序,每個線程使用一個EntityManager,使用@PersistenceContext等。

編輯: 是一個有關同步訪問EntityManager的問題。 我認為這可能對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM