我是新來的春季和冬眠,所以考慮到你的答案。Spring + Hibernate:如何實現Entites和DAO
我有很多一對多的關係進行了鏈接表還必須包含的信息。我會嘗試這種根據解決:
How Do I Create Many to Many Hibernate Mapping for Additional Property from the Join Table?
我的問題是關於:
hibernate: Custom code on insert/update
但我只是重複了這裏,所以需要在鏈接沒有點擊:
可以說我們有顏色。用戶可以創建n種顏色的混合物並將該混合物存儲在數據庫中。稍後,如果用戶搜索顏色「藍色」,則應顯示所有包含藍色的混合物。
業務規則是,任何顏色只應在數據庫中一次。所以如果插入一個新混合物,必須首先檢查所有顏色是否已經存在於數據庫中,如果是,應該重新使用(引用)該顏色,如果不是,則應該創建一個新的混合物。
如果混合物發生變化,說「藍色」替換爲「紅色」,則行爲必須是初始「藍色」保持不變,並且系統檢查是否存在「紅色」,並重新使用或創建它,然後將其添加到混合物中。
的重要組成部分,是「顏色」是由系統管理和現有的顏色必須永遠不會改變。「紅」永遠是「紅」,絕不應改爲「藍色」。由於我是Hibernate和Spring的新手,我對於如何實現這個規則以及在什麼級別上感到失望.IMHO我會將該邏輯放在最低級別,以便在您(開發人員)忘記檢查它。那有意義嗎?更好的想法或建議?
如果顏色未被使用,您可以將其刪除。但假設我將「紅色」和「藍色」的混合物更改爲「綠色」和「藍色」。檢查是否可以刪除「紅色」只是增加開銷。但我想你不會檢查,只是刪除它,並依靠數據庫限制刪除?但是,那麼你基本上必須添加邏輯來吞嚥在限制上拋出的異常?如果我沒有名字的setter,加載實體時hibernate將如何填充該字段?是不是要求? –
什麼是刪除的用例?它是從UI驅動的,因此依靠數據庫限制是一個有效的例子。如果color.mixtures.size()> 0,那麼在業務層中進行檢查也沒有太大的害處。在二傳手問題上,我認爲你是對的。對不起,誤導。在這種情況下,您可能希望將其限制在DAO級別上,即不要提供'updateColor'方法。也就是說,降低一級可以通過EntityManager持久/合併Color對象。 – maksimov