繁体   English   中英

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

[英]Does JPA load entities in JPQL, as it does when using entities in code?

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

现在,我必须将“ Person和“ Houseaddress (可以不同)分配给相同的地址。

有超过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进行的更新是否具有与代码中相同的性能? 还是我应该使用本机查询来不加载实体,因为我只想要性能。

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

本机查询将更快,因为它无需翻译任何内容。

如果您希望它更快,可以使用PreparedStatement 使用.addBatch()方法,您可以将查询添加到批处理中,而使用executeBatch()方法,您将执行完整的批处理,从而最大程度地减少了在用户和内核模式之间切换的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM