2010-03-12 54 views
1

我從JBoss網站上的教程學習Hibernate。我在代碼示例here中遇到困惑。休眠 - 一個設計問題

4.1. A simple POJO example有一個Cat類代碼。

Cat類有作爲private Cat mother;

Q1到他母親的參考。如果這個類的標識符屬性爲id,那麼存儲貓的母親身份而不是貓的母親對象會更好嗎?

意味着不是

private Cat mother; 

豈不是更好有

private long motherId; 

`

回答

4

那就是冬眠含蓄爲你做。

關於ORM的好處是,它完全隱藏了實施警告,因爲您正在使用RDBMS而不是使用普通對象。您可以使用mother作爲Cat,而不會打擾它在內部表示爲id的事實。

1

不一定,存儲對象引用而不是Id是有益的,因爲它隱式驗證引用,因爲Id可以是任何數字,有效的Cat Id或其他。這是您必須處理的驗證和錯誤檢查的額外一層。

你必須警惕的唯一缺陷是序列化對象,並確保沒有無限循環,Dto可以在那裏幫助。例如,假設你想將Cat序列化爲一個web服務,並且你只想序列化一個貓而不是整個貓層次結構(貓,貓的母親,貓的母親的母親等)。您可以創建一個數據傳輸對象這是一個圍繞Car類的薄包裝,此包裝可以序列化Id而不是引用的對象,以便消費用戶可以在需要時獲取母親。 Dto還有其他的好處,比如維護一個不變的界面,而底層的域對象可以改變以適應代碼庫。

+0

什麼叫「DTO的是良好的意味 如果我想用你的設計來遍歷一個家譜,代碼會看起來像那「 – 2010-03-12 18:00:54

+0

更新了你的答案。 – vfilby 2010-03-12 18:05:00

1

超出上述原因,簡單易用性如何?用實際對象的引用而成爲更優雅

 
Cat firstCat = //get starting cat somehow 
Object someBroker = //get a 3rd party broker (like an entity manager) 
Cat parent = broker.getCatById(firstCat.getParentId()); 

 
Cat firstCat = // get initial cat 
while ((Cat ancestor = firstCat.getParent)!=null) { 
    //work with ancestor 
}