java - HQL 多次更新。有没有更好的办法?

标签 java hibernate hql

我有一个 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/

相关文章:

java - 在 Hibernate Java 中获取两个日期之间的用户数据

java - 从 JSON 获取温度

java - 辅助数据在 Java 源代码树中的正确位置?

java - 哈希码 这是什么?

java - 如何漂亮地打印 Hibernate 查询结果?

database - 使用 Hibernate 通过 PostgreSQL 过程获取结果

java - 如何在 HQL 中按列表大小选择对象?

java - Hibernate (mysql) 为同一个查询返回不同的结果

java - JAXB:如何实现 JAXB 兼容的变体包装类?

java - transient 变量的注解@Basic