Java JOOQ与Hibernate行为

Java JOOQ与Hibernate行为,java,sql,hibernate,jooq,Java,Sql,Hibernate,Jooq,正如我们所知,Hibernate有一个非常好的特性,当我们将任何对象传递给这个方法时,它知道数据将update或者新记录将添加到数据库中。这项功能在JOOQ中也可用吗?还是在我的代码中我必须处理这项功能 jOOQ也这样做。如果更改记录的主键,则它将使用插入,否则,它将使用更新 实际上,当您从数据库中读取记录时,调用store()将触发更新,正如您所期望的那样。如果您创建一个新记录,那么它将被INSERTed 在2.6版本中,克隆一条记录然后要求jOOQ更新它有点困难(因为克隆将在新实例中设置主键

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

jOOQ也这样做。如果更改记录的主键,则它将使用
插入
,否则,它将使用
更新

实际上,当您从数据库中读取记录时,调用
store()
将触发
更新
,正如您所期望的那样。如果您创建一个新记录,那么它将被
INSERT
ed


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

jOOQ也会这样做。如果更改记录的主键,则它将使用
插入
,否则,它将使用
更新

实际上,当您从数据库中读取记录时,调用
store()
将触发
更新
,正如您所期望的那样。如果您创建一个新记录,那么它将被
INSERT
ed


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

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

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

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

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

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

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

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

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

不,我的意思是
store()
方法与
saveOrUpdate()
你所说的“触发更新()”到底是什么意思?我想触发更新()查询已经详细回答了这个问题。请再读一遍我的答案。@subodh:在我看来,亚伦的答案已经很清楚了。真的没有什么可补充的了
store()
执行
更新
插入
,具体取决于主键信息在该记录中是否可用。我建议您阅读,并在堆栈溢出问题之外(或之前)自己尝试1-2件事。不,我的意思是
store()
方法与
saveOrUpdate()
您所说的“触发更新()”的确切含义是什么?我想触发更新()查询已经详细回答了这个问题。请再读一遍我的答案。@subodh:在我看来,亚伦的答案已经很清楚了。真的没有什么可补充的了
store()
执行
更新
插入
,具体取决于主键信息在该记录中是否可用。我建议您阅读,并尝试1-2件事,除了(或之前)您的堆栈溢出问题。