JOOQ Vs Hibernate行为

时间:2013-11-15 10:06:44

标签: java sql hibernate jooq

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

2 个答案:

答案 0 :(得分:4)

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

实际上,当您从数据库中读取记录时,调用store()将触发UPDATE,如您所料。如果您创建了新记录,那么它将为INSERT

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

答案 1 :(得分:1)

如果您从数据库中读取记录并调用record.store(),您将获得与hibernate saveOrUpdate方法相同的行为,它的工作方式非常完美!

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

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

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