在数据库中持久存在和存在JPA实体的正确方法

时间:2015-07-06 17:19:12

标签: jpa persist

在我正在处理的一个应用程序中,我发现修改后的JPA对象不会被预先加载,我的意思是;

而不是这样:

getEntityManager().find(Enterprise.class, idEnterprise);
//Some modifying operations

他们喜欢这样(并且有效!):

Enterprise obj = new Enterprise (IdEnterprise);
//Some modifying operations
getEntityManager().persist(obj);

最后一个解决方案不会从数据库加载对象,它会正确修改对象。

  1. 这怎么可能?
  2. 这是一个好习惯吗?至少你避免从数据库加载的查询,对吗?
  3. 由于

1 个答案:

答案 0 :(得分:0)

这取决于。如果你是从控制器类(或任何应用程序代码)编写代码,你不应该担心jpa的东西,所以第二种方法是坏的和多余的。

如果您正在使用基础架构代码,也许您可​​以手动持久保存实体以启用某些性能优化,或者仅仅因为即使事务失败也希望数据保持不变。

我强烈怀疑第二位代码是从头开始创建实体的人,但是在同一方法中混合应用程序,域和基础架构代码:这是一种非常邪恶的做法。 (非常邪恶,darth父亲邪恶,永远不会那样做)