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