2011-06-15 16 views
1

我使用JPA +休眠。JPA:添加不應該失敗,如果其中一行不能添加

我有2個實體(父,孩子)與他們之間的OneToMany連接。我想補充的孩子的名單父這樣的:

parent.setChildrent(childrenSet); 
getEntityManager().merge(parent); 

如果小兒實體之一包含無效值(例如,過長的字符串),其插入失敗,整個交易失敗。

有沒有辦法忽略/記錄錯誤,並繼續合併其餘的孩子?

我知道我可以一個一個地添加孩子,但有沒有更好的解決方案?

謝謝。

+1

爲什麼你只是想忽略這樣的關鍵性錯誤?我從來沒有遇到過要求應用程序以這種方式行事的要求。數據驗證是任何數據相關應用程序的主要關注點。 – 2011-06-15 16:54:25

+0

我不想讓交易失敗,因爲這些數據對於用戶來說至關重要,我更願意至少保存其中的一部分並將其呈現給用戶。我想記錄一個失敗,或者如果它太長,可能會截斷一個字符串。 – lili 2011-06-16 13:05:14

回答

1

如果小兒實體之一包含無效值(例如,過長的字符串),...

您shouldn't處理由處理數據庫錯誤這樣的問題。 在向數據庫啓動事務之前,嘗試在應用程序中過濾太長的字符串或無效值。

如果存在數據庫錯誤,將執行回滾並執行所有更改,同時此事務將被撤消。

致以問候

+0

我不想知道數據庫結構(對於這些驗證,我需要知道子屬性將保存在varchar(255)列中)。 – lili 2011-06-15 12:44:08

+0

對不起,但我想我沒有明白你的意思。 你不知道你的應用程序的數據庫結構? – Lodger 2011-06-15 14:30:08

+0

在JPA中,我聲明瞭一個String字段,Hibernate(或DBA)決定將它創建爲varchar(255)或varchar(511)或其他任何東西。我不想意識到這一點。 我確實想忽略這樣的錯誤並保存有效的孩子 – lili 2011-06-15 14:45:20

相關問題