1

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

4

2 回答 2

4

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

事实上,当您从数据库中读取一条记录时,调用将按您的预期store()触发。UPDATE如果您创建一个新记录,那么它将被INSERT编辑。

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

于 2013-11-15T10:33:44.473 回答
1

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

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

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

public int saveOrUpdate(Record record) {
    if(record.getId() != null) {
        return record.update();
    } 
    return record.store();    
}
于 2015-08-12T19:34:17.253 回答