2013-05-05 171 views
2

我用來讀取編碼最佳做法是休眠的實體不應該實施實體休眠實現系列化

了java.io.Serializable


我的想法只是爲了更好的性能,以避免編譯器處理實體的東西。我們應該使用DTO序列化來代替客戶端和服務器通信。

是不是?

非常感謝!

回答

0

這根本不是最佳實踐,並且實現可序列化或不實現對性能沒有任何影響。如果你想能夠序列化你的實體,讓它們實現Serializable。如果你不想,那麼不要讓它們實現Serializable。就這麼簡單。

當實體本身包含足夠的信息時使用DTO被認爲是反模式而不是被視爲最佳實踐。

+0

這個答案不正確。 Hibernate POJO不可序列化。請參閱下面的答案。 – Johanna 2013-05-06 07:29:56

0

Hibernate POJO不可序列化。這不是最佳實踐或性能的問題。它根本不起作用。這就是爲什麼。

當您將POJO聲明爲可序列化時,您不會收到任何編譯器錯誤。但在執行時,當您嘗試序列化和反序列化對象時,您可能會遇到異常。

例如,當您使用GWT並在客戶端和服務器之間發送數據時,會出現此問題。 Hibernate POJO的失敗僅僅是因爲它們不能被序列化。有關更詳細的異常,請參閱「爲何Hibernate對象在到達瀏覽器世界時無法理解」(位於頁面中間之前)一章中的description of GWT with Hibernate一章。

+0

僅僅因爲Hibernate POJO不能與GWT一起使用並不意味着它們不可序列化。 GWT是一個非常特殊的環境,Java代碼被編譯爲JavaScript並在瀏覽器中運行。正常的應用程序(客戶端是Java應用程序)可以很好地序列化Hibernate POJO。我已經在幾個項目中將Hibernate POJOs序列化並通過網絡發送到Swing應用程序。 – 2013-05-06 07:37:37

+0

GWT確實是一個特殊的環境,但它正是Hibernate對象的序列化,它不起作用。這就是爲什麼不推行Serializable的一般建議是正確的,爲什麼我不同意你的答案。當一個類實現Serializable時,它應該始終工作,而不僅僅是有時候。 – Johanna 2013-05-06 07:44:43

+0

它不起作用,因爲對Java的GWT支持有限。即使是不可序列化的類也與GWT不兼容。甚至Google的一些Guava課程也與Google的GWT不兼容。 Hibernate POJOs的Java序列化確實可以正常工作。 GWT不是Java。 – 2013-05-06 07:58:08