2010-07-18 69 views
2

我的應用程序中有兩個持久對象:事物和標籤附加到事物上。該應用可以生成帶有標籤的東西的集合。標籤對象具有唯一的名稱(用相同的標籤標記兩次是沒有意義的)。JPA和唯一字段

當插入一個Thing(帶有附加的標籤對象)時,這些具有相同名稱的標籤對象中的某些可能已經存在於數據庫中。下面是我不記得有關JPA的部分,有沒有辦法告訴JPA,如果違反唯一約束,它不應該嘗試將相應的對象添加到數據庫中?或者有沒有辦法有效地做到這一點,而不必首先獲取所有對象,然後將該集合合併到內存中,然後將所有內容都寫回去?

我也想知道是否可以一次保存整個集合,或者我必須在使用JPA時調用每個對象的持久化嗎?

回答

1

我不知道有什麼辦法「乾淨利落地」,無論是JPA還是Hibernate或任何其他提供者。你可以實現你想要使用自定義的SQL查詢,但(類似於this question)什麼:

@Entity 
@Table(name="tag") 
@SQLInsert(sql="INSERT INTO tag(name, count) VALUES (?, ?) 
ON DUPLICATE KEY UPDATE set count = count + 1") 
public class Tag {} 

現在你不幸必然Hibernate和MySQL的。你可以改變其他數據庫的sql語法,和/或使用存儲過程,首先嚐試更新並插入失敗等等。它們都有它們的缺點,所以如果JPA支持這一點,它會很方便,但是可惜。

關於你的第二個問題,JPA支持持久化整個對象圖,包括集合。

+0

最後一個問題:如果我堅持一個對象的引用,那麼對象的引用已經存在並且級聯處於打開狀態,會發生什麼? – Nils 2010-07-19 09:02:33