JPA:合并分离对象的有效方法是什么?

时间:2011-02-02 17:16:32

标签: hibernate jpa spring-mvc

技术:Spring,Hibernate,JSR-303,JQuery
平台:Windows

我正在尝试实现一个简单的更新用例。请参阅DAO/Service/Controller Source Code Link

Class2包含许多属性,包括Class1。 Class2Controller利用Spring创建一个新的Class2对象,并将HttpRequest对象参数绑定到Class2。然后它调用Service,而Service又调用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对象并请求Spring绑定参数。

  • 我意识到选项2不是一个可行的选择。请查看我之前遇到的其他问题link。 Hibernate将尝试加载关联的对象,并且在没有我的自定义约束EntityNotFoundException的情况下抛出@IdMustExist有机会进行验证。

如果您有任何其他建议,请提出建议。

1 个答案:

答案 0 :(得分:0)

您应该使用dynamic-update = true来更新实体/表格&它经过高度优化,只会更新其值已更改的列。不包括所有字段。

您可以通过注释驱动的pojo使用 @ org.hibernate.annotations.Entity(dynamicUpdate = true)