2013-03-25 108 views
3

我有一個由Hibernate加載的ORM實體,當我需要它們時加載某些關聯LAZY。這個實體通過MQ傳輸到客戶端應用程序(客戶端是.NET,因此我使用MessagePack進行序列化/反序列化),當實體被MsgPack序列化時,它試圖訪問延遲加載的關聯,並失敗該會議已經結束。即使它沒有失敗,我也不希望它在某些情況下加載關聯。休眠:空收集而不是延遲加載錯誤

有沒有辦法告訴hibernate使用空值填充惰性關聯而不是代理對於某些查詢結果,還是必須迭代返回的列表並自行執行這些更改?

感謝您的回答!

+1

傳遞一個數據傳輸對象而不是POJO--這樣你可以控制你傳遞的東西。 – 2013-03-25 21:33:10

回答

2

你有沒有別的辦法,只能採用DTO對象,通過對MQ轉院吧,

  1. 負荷實體。
  2. 使用MQ
  3. 將其轉換爲對對方的任何其他實體轉移到消費者。
+0

我真的很害怕,這是唯一的選擇。我儘量避免使用DTO ... – 2013-03-25 21:37:12

+1

我相信最好的做法是使用DTO,同時在MQ中傳輸對象。不要序列化JPA帶註釋的對象。我在過去遇到過這樣的困境,並相信DTO是最好的解決方案。 – 2013-03-25 21:39:55

+1

BTW,我不知道你是否使用了Spring或沒有,但如果你是我建議你使用ConversionServiceFactoryBean,它可能給你相當不錯的「開箱即用」的轉換服務解決方案 – 2013-03-25 22:36:08

0

我認爲@Transient僅適用於ORM。如果你不希望你的字段被序列化,你應該使用關鍵詞「transient」。從DB使用Hibernate

  • 其轉換到implents Serializable DTO對象

    private transient List<Object> myTransientList;