createQuery 与 createNativeQuery,update/delete 语句的性能差异
createQuery vs createNativeQuery, performance difference for update/delete statements
两者之间是否存在性能差异:
entityManager.createQuery("UPDATE MyTable SET coll1 = :someValue").setParameter("someValue").executeUpdate();
和
entityManager.createNativeQuery("UPDATE MyTable SET coll1 = :someValue").setParameter("someValue").executeUpdate();
如果是,是否足以使用一种方法而不是另一种方法?
我正在对 hibernate 和 entity framework 核心进行性能比较。在 EF 核心中,这种事情只能使用本机 SQL 完成(好吧,有第三方库)所以我想知道我是否应该为 createNativeQuery() 切换所有 createQuery().executeUpdate()。在我的休眠项目上执行更新()。
与任何此类性质的事物一样,您应该测试您的数据和系统。
但是,createNativeQuery()
接口旨在让您直接调用 SQL,而不是通过 ORM 映射。这里有一个简单的更新语句,所以生成的 SQL 应该非常接近原生的 SQL.
您不依赖于数据库的任何基础功能。通过 ORM 进行的翻译可能会有一些额外的开销——但您已经通过选择使用 ORM 接受了这种开销。
我会坚持使用该框架,除非测试表明性能有明显损失。
两者之间是否存在性能差异:
entityManager.createQuery("UPDATE MyTable SET coll1 = :someValue").setParameter("someValue").executeUpdate();
和
entityManager.createNativeQuery("UPDATE MyTable SET coll1 = :someValue").setParameter("someValue").executeUpdate();
如果是,是否足以使用一种方法而不是另一种方法?
我正在对 hibernate 和 entity framework 核心进行性能比较。在 EF 核心中,这种事情只能使用本机 SQL 完成(好吧,有第三方库)所以我想知道我是否应该为 createNativeQuery() 切换所有 createQuery().executeUpdate()。在我的休眠项目上执行更新()。
与任何此类性质的事物一样,您应该测试您的数据和系统。
但是,createNativeQuery()
接口旨在让您直接调用 SQL,而不是通过 ORM 映射。这里有一个简单的更新语句,所以生成的 SQL 应该非常接近原生的 SQL.
您不依赖于数据库的任何基础功能。通过 ORM 进行的翻译可能会有一些额外的开销——但您已经通过选择使用 ORM 接受了这种开销。
我会坚持使用该框架,除非测试表明性能有明显损失。