我有两个表:Person
和House
,映射是一对一的。
现在我必须将address
Person
和House
(可能不同)分配到同一地址。
有超过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的更新是否具有相同的性能,与代码中的相同?或者我应该使用本机查询来加载实体,因为我只想要性能。
答案 0 :(得分:0)
使用查询会更快(并且内存效率更高),因为查询提供程序会将JPQL查询转换为本机SQL。此外,如果直接使用实体,则对数据库进行的查询数量将显着增加(每行选择一次并更新)。
答案 1 :(得分:0)
原生查询会更快,因为它不需要翻译任何内容。
如果您希望它更快,可以使用PreparedStatement。使用.addBatch()方法将查询添加到批处理中,使用executeBatch()方法,您将执行完整批处理,从而最大限度地减少在用户和内核模式之间切换的次数。