EJB-QL UPDATE语句是否会使CMP失败

时间:2009-12-30 19:05:31

标签: hibernate jboss ejb-3.0 jpql

与修改托管实体上的访问者相比,运行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");

2 个答案:

答案 0 :(得分:1)

性能不同 两种情况

当我们使用

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

性能优于另一种情况。

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

作者:Narendra Choyal

答案 1 :(得分:0)

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

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