我有一个 map ,我想坚持下去。域对象是这样的:
public class Settings {
private String key;
private String value;
public String getKey() { ... }
public String getValue() { ... }
public void setKey(String key) { ... }
public void setValue(String value) { ... }
}
标准方法是为每对生成一个Setting
,然后saveOrUpdate()
。但是它会产生太多的查询,因为我需要一次保存很多设置,这真的会影响性能。有没有办法使用一个更新查询来做到这一点?
UPD: 好的,也许有更新多行的 hql 语法?有点像
update Settings s1 set s1.value = :value1 where s1.key = :key1
s2 set s2.value = :value2 where s2.key = :key2
最佳答案
如果每个设置都是表中的一行,那么需要发出尽可能多的更新语句。但是有几件事要看
1) 将 hibernate 批处理大小调整为 20 左右,这意味着尽管 hibernate 发出 20 个更新,但它们都是作为批处理发送的(希望一个网络往返提供驱动程序允许批处理)
2) 修改您的 dao 代码/事务逻辑以批量执行操作
3) 有一个存储过程并传递数组值(我认为 hibernate 和 storedprocs 不是好 friend )
关于java - HQL 多次更新。有没有更好的办法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2453253/