2011-02-02 77 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 =真)

相关问题