java - JPA 是否会像在代码中使用实体时那样在 JPQL 中加载实体?

标签 java jpa

我有两个表:PersonHouse,映射是一对一的。

现在我必须将PersonHouse(可以不同)的address分配给同一个地址。

有超过 5000 条记录。哪个会更快?使用代码来一一更新实体,例如

for (id : Ids) {
    Person person = PersonDAO.find(id);
    person.setAddress ("abc");
}

然后对House做同样的事情;

或者我应该使用 JPQL 在两个不同的查询中更新两者,例如

UPDATE Person p SET p.Address = "abc" WHERE ID IN(.....ID QUERY)

我的问题是什么会更快?使用JPQL更新是否具有与代码中相同的性能?或者我应该使用 native 查询来不加载实体,因为我只想要性能。

最佳答案

使用查询会更快(并且内存效率更高),因为查询提供程序会将 JPQL 查询转换为 native SQL。此外,如果直接使用实体,则对数据库进行的查询数量将显着增加(对每一行进行一次选择和更新)。

关于java - JPA 是否会像在代码中使用实体时那样在 JPQL 中加载实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35554989/

相关文章:

java 模拟带有重定向的post表单

java - 文件创建在 Java 中是如何工作的

Java XPath 问题

java - 无法使用jsp将数据插入mysql

hibernate - 是否可以停止 jpa 中的连接?

java - 是否可以将 PostgreSQL 中的字符字段转换为 JPA 命名查询中的整数?

java - JPA2/Hibernate - 停止延迟加载?

java - 如何删除特殊字符而不删除另一种语言的文本?

JPA EclipseLink : Persisting detached entity does not throw any error

java - 映射表丢失@manyToMany中的非唯一ID