【问题标题】:JOOQ Vs Hibernate behaviorJOOQ 与休眠行为
【发布时间】:2013-11-28 16:36:45
【问题描述】:

我们知道Hibernate 有一个非常好的特性SaveOrUpdate,当我们将任何对象传递给此方法时,它知道数据将是update 或将在数据库中添加新记录。这个功能在JOOQ 中是否也可用,或者在我的代码中我必须处理这个?

【问题讨论】:

    标签: java sql hibernate jooq


    【解决方案1】:

    jOOQ 也是如此。如果更改记录的主键,则使用INSERT,否则使用UPDATE

    事实上,当您从数据库中读取一条记录时,调用store() 将触发您所期望的UPDATE。如果您创建一条新记录,那么它将是INSERTed。

    在 2.6 中,克隆一条记录然后让 jOOQ 更新它有点困难(因为克隆会在新实例中设置主键,因此将其标记为“新”-> 插入)。

    【讨论】:

    • 不,我的意思是 store() 方法与 saveOrUpdate() 相同
    • “触发 Update()”到底是什么意思?
    • 我认为触发 Update() 查询
    • 我已经详细回答了这个问题。请再次阅读我的回答。
    • @subodh:在我看来,Aaron 的回答已经很明确了。真的没有什么要补充的了。 store() 执行UPDATEINSERT,具体取决于该记录中是否存在主键信息。我建议您阅读Javadoc on that method,并在您的 Stack Overflow 问题之外(或之前)自己尝试 1-2 件事。
    【解决方案2】:

    如果你从数据库中读取一条记录并调用record.store(),你将拥有与hibernate saveOrUpdate方法相同的行为,它可以完美运行!

    但在大多数情况下,您不会从数据库中读取记录,而是会从控制器或视图中接收记录,例如,在这种情况下,方法 record.store() 不会更新,它总是插入即使你设置了 id。

    现在我正在实现我自己的 saveOrUpdate,通过记录 ID 检查。

    public int saveOrUpdate(Record record) {
        if(record.getId() != null) {
            return record.update();
        } 
        return record.store();    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-08
      • 2010-11-26
      • 2011-09-10
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多