2011-11-17 159 views
3

我們有一個可以發送DTO對象的flex客戶端。 這樣做是因爲我們的域對象包含大量數據,而客戶端通常只查看一小部分數據。將部分DTO映射回域對象

因爲很多域對象包含我們不想發送給客戶端的數據(字符串),所以我們更喜歡DTO的延遲加載。

當我們對客戶端進行更改時,我們將DTO發送回服務器。

我想知道在域對象上應用這些更改並讓hibernate保存它的最佳實踐。

我應該先讀域對象並將值從DTO複製到域對象?

是否有API可以幫助我,所以我不必爲我的所有域對象創建映射器?

回答

1

隨着休眠,最好使用DTO作爲Bean,這也應該映射到table in DB。閱讀關於休眠映射的更多信息here。如果您使用的是Legacy數據庫,則此更改可能會更改。

可以說我有2 豆類UserAddress。這些將被映射到支持表tUserstAddresses。這是你用hibernate思考的典型結構。您可以撥打電話UserAddress a類

現在,假設我需要一個DTO,其數據將從多個表中的查詢填充,並且它沒有支持表。有multiple ways填充DTO而不是使用Bean進行數據傳輸。

我的定義也有爭議,但我覺得第一種方法(用豆)好,不管你怎麼稱呼它DTOBean

+0

感謝您的回覆,我會看看您發送的鏈接。我不太明白你的意思是DTO應該是一個bean並存儲在數據庫中。爲什麼我應該在數據庫中存儲DTO? –

+0

我已經用一些例子更新了答案。 – ManuPK

+0

謝謝,我明白你的意思。但是不用變換器來創建可以發送給客戶端的DTO對象嗎?我的問題是我需要更新數據庫。客戶發送給我一個包含更改字段的DTO。我現在需要從數據庫中讀取原始對象,而不是映射更改的字段,而不是進行更新。 –

1

當您獲得DTO時,您將從數據庫加載相應的對象,並根據DTO的狀態更新它們。 Hibernate將負責更​​改跟蹤,所以只有更改的實體纔會保存回數據庫。

您想在代碼中執行此操作的原因是在應用更改時應用的附加邏輯和驗證。例如

  • UserDTO有用戶名顯示在用戶界面上,但你不想改變那麼容易嗎?
  • 始終驗證用戶輸入,並從線未來的DTO是用戶輸入