1

两者之间是否存在性能差异:

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

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

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

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

4

1 回答 1

2

与这种性质的任何事情一样,您应该测试您的数据和系统。

但是,该createNativeQuery()接口旨在让您直接调用 SQL,而不是通过 ORM 映射。这里有一个简单的更新语句,所以生成的 SQL 应该非常接近原生 SQL。

您不依赖于数据库的任何底层功能。通过 ORM 进行翻译可能会有一些额外的开销——但您已经通过选择使用 ORM 接受了这个开销。

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

于 2020-01-01T14:59:40.277 回答