以下之间是否存在性能差异:
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/