createQuery与createNativeQuery,更新/删除语句的性能差异

时间:2020-01-01 14:47:15

标签: java sql hibernate bulkupdate native-sql

以下两者之间是否存在性能差异?

entityManager.createQuery("UPDATE MyTable SET coll1 = :someValue").setParameter("someValue").executeUpdate();

entityManager.createNativeQuery("UPDATE MyTable SET coll1 = :someValue").setParameter("someValue").executeUpdate();

如果可以,使用一种方法是否足够高?

我正在对休眠和实体框架核心之间的性能进行比较。在EF核心中,此类操作只能使用本机SQL来完成(嗯,有第三方库),因此我想知道是否应该将所有createQuery()。executeUpdate()切换为createNativeQuery()。executeUpdate()我的休眠项目。

1 个答案:

答案 0 :(得分:2)

与任何这种性质的东西一样,您应该对数据和系统进行测试。

但是,createNativeQuery()接口旨在让您直接调用SQL,而不是通过ORM映射。您在此处有一条简单的更新语句,因此生成的SQL应该非常接近本机SQL。

您不依赖数据库的任何基础功能。通过ORM进行翻译时可能会有一些额外的开销-但是您已经选择使用ORM来接受该开销。

我会坚持使用框架,除非测试表明存在明显的性能损失。