与修改托管实体上的访问者相比,运行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");
答案 0 :(得分:1)
当我们使用
时em.createQuery("UPDATE MyEntity myEntity SET myEntity.myField1="+myField1).executeUpdate();
性能优于另一种情况。
因为在其他情况下,首先我们获取数据,设置其值然后保存 - |-Ñ-| - 但不是在其他情况下。
作者:Narendra Choyal
答案 1 :(得分:0)
不,没有性能差异。如果将showSql
属性设置为true
,则可以查看生成的查询。以上两种变体都会生成相同的查询(除非启动autoflush,我想)。
您应该尝试避免使用QL执行更新和删除,因为它不处理级联。在您的情况下,您正在设置简单的字符串值,因此不存在级联,但请记住它。