0

与修改托管实体上的访问器相比,运行 EJBQL UPDATE 语句是否会破坏容器托管持久性的性能优势?

从数据库负载/性能的角度来看,我对此特别感兴趣。

例如,如果我有一个名为 MyEntity 的实体并且我想更新 myField1 和 myField2 以下两种方法之间是否存在性能差异:

Query query = em.createQuery("UPDATE MyEntity m SET m.myField1 = :value1, m.myField2 = :value2 WHERE m.id = :id")
query.executeUpdate();

相对

MyEntity myEntity = find("123");

myEntity.setMyField1("newvalue");
myEnttiy.setMyField2("newvalue2");
4

2 回答 2

1

两种情况下性能不同

当我们使用

em.createQuery("UPDATE MyEntity myEntity SET myEntity.myField1="+myField1).executeUpdate();

性能比另一种情况更好。

因为在其他情况下,当我们首先获取数据时,设置其值然后保存 --|-Ñ-|-- 但在其他情况下则不然。

纳伦德拉乔亚尔

于 2011-06-24T12:10:27.293 回答
0

不,没有性能差异。如果您将showSql属性设置为true,您可以看到生成的查询。上述两种变体都将生成相同的查询(我想除非 autoflush 已打开)。

您应该尽量避免使用 QL 执行更新和删除,因为它不处理级联。在您的情况下,您正在设置简单的字符串值,因此不存在级联,但请记住这一点。

于 2009-12-30T19:50:10.023 回答