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

标签 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();

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

我正在对 Hibernate 和 Entity Framework 核心进行性能比较。在 EF core 中,这种事情只能使用 native SQL 来完成(好吧,有第三方库),所以我想知道是否应该将所有 createQuery().executeUpdate() 切换为 createNativeQuery().executeUpdate()我的 hibernate 项目。

最佳答案

与任何此类性质的事情一样,您应该对您的数据和系统进行测试。

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

您不依赖数据库的任何底层功能。通过 ORM 进行转换可能会产生一些额外的开销 - 但您已经通过选择使用 ORM 接受了该开销。

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

关于java - createQuery 与 createNativeQuery,更新/删除语句的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59553455/

相关文章:

java - 创建基于角色的 Web 应用程序的最佳方法是什么?

java - Mockito 问题 - InvalidUseOfMatchersException

sql - SQL:选择至少一行具有特定值的不同“类别”

MySQL根据表2的INNER JOIN结果更新表1中的列

java - 无状态身份验证是否适用于每用户数据库连接?

spring - 使用 JPA 2.0 和 @OneToMany 删除孤立实体的解决方法是什么?

java - 当声明最终实例时为什么我必须初始化它?

mysql - 用于保存统计数据并保存统计历史记录的数据库设计

java - 在 Hibernate 中从另一个表中提取字段

java - libgdx box2d body - 为什么到达接触点位置后 body 会摇晃?