2011-02-02 64 views
4

技術:spring,hibernate的,JSR-303,JQuery的
平臺:視窗JPA:什麼是合併分離對象的有效方式?

我想實現一個簡單的更新使用案例。請參閱DAO/Service/Controller Source Code Link

Class2包含許多屬性,包括Class1。 Class2Controller利用Spring創建一個新的Class2對象並將HttpRequest對象參數綁定到Class2。然後它調用服務,然後調用DAO。在DAO中,將這個新的Class2對象更新爲數據庫的最有效方法是什麼?

選項1:

  • 目前在DAO,我從數據庫中檢索的Class2對象。

    Class2 class2Persisted = em.find(Class2.class, class2Request.getId());

  • 更新檢索與從請求對象屬性對象和提交

    tx.begin(); 
    class2Persisted.setClass1(class2Request.getClass1()); 
    em.merge(class2Request); 
    tx.commit(); 
    
  • 以上,我只更新使用setClass1一個性質。但是Class2中有很多屬性需要更新。還有其他有效的方式將class2Persisted與class2Request合併到對象級別而不是在每個屬性級別?

選項2

  • 讓Class2Controller檢索class2Persisted對象和請求彈簧結合參數。

  • 我意識到選項2不是一個可行的選項。請參閱我之前遇到的另一個問題link。 Hibernate會嘗試加載關聯的對象,並會拋出EntityNotFoundException而我的自定義約束@IdMustExist得到驗證的機會。

請建議您是否有其他建議。

+0

是在class2Persisted和class2Request相同的底層行(S) D b? (例如他們是否有相同的唯一ID)? – rhinds 2011-05-20 16:43:43

回答

0

您應該使用dynamic-update = true來更新實體/表&它是高度優化的,並且只會更新其值更改的列&不包括所有字段。

您可以通過註解驅動的POJO 使用@ org.hibernate.annotations.Entity(dynamicUpdate =真)

相關問題