技术: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
有机会进行验证。
如果您有任何其他建议,请提出建议。
答案 0 :(得分:0)
您应该使用dynamic-update = true来更新实体/表格&它经过高度优化,只会更新其值已更改的列。不包括所有字段。
您可以通过注释驱动的pojo使用 @ org.hibernate.annotations.Entity(dynamicUpdate = true)
和