【发布时间】:2011-06-20 03:18:33
【问题描述】:
技术:Spring、Hibernate、JSR-303、JQuery
平台:Windows
我正在尝试实现一个简单的更新用例。请看DAO/Service/Controller Source Code Link
Class2 包含许多属性,包括 Class1。 Class2Controller 利用 Spring 创建一个新的 Class2 对象并将 HttpRequest 对象参数绑定到 Class2。然后它调用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没有机会验证。
如果您有任何其他建议,请提出建议。
【问题讨论】:
-
class2Persisted 和 class2Request 数据库中的底层行是否相同? (例如,它们是否具有相同的唯一 ID)?
-
一般来说你永远不应该使用合并,使用“扩展持久化上下文”
标签: hibernate jpa spring-mvc