JOOQ 与休眠行为
Posted
技术标签:
【中文标题】JOOQ 与休眠行为【英文标题】:JOOQ Vs Hibernate behavior 【发布时间】:2013-11-28 16:36:45 【问题描述】:我们知道Hibernate
有一个非常好的特性SaveOrUpdate,当我们将任何对象传递给此方法时,它知道数据将是update
或将在数据库中添加新记录。这个功能在JOOQ
中是否也可用,或者在我的代码中我必须处理这个?
【问题讨论】:
【参考方案1】:jOOQ 也是如此。如果更改记录的主键,则使用INSERT
,否则使用UPDATE
。
事实上,当您从数据库中读取一条记录时,调用store()
将触发您所期望的UPDATE
。如果您创建一条新记录,那么它将是INSERT
ed。
在 2.6 中,克隆一条记录然后让 jOOQ 更新它有点困难(因为克隆会在新实例中设置主键,因此将其标记为“新”-> 插入)。
【讨论】:
不,我的意思是store()
方法与 saveOrUpdate()
相同
“触发 Update()”到底是什么意思?
我认为触发 Update() 查询
我已经详细回答了这个问题。请再次阅读我的回答。
@subodh:在我看来,Aaron 的回答已经很明确了。真的没有什么要补充的了。 store()
执行UPDATE
或INSERT
,具体取决于该记录中是否存在主键信息。我建议您阅读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();
【讨论】:
以上是关于JOOQ 与休眠行为的主要内容,如果未能解决你的问题,请参考以下文章