2013-02-20 27 views
0

我有一个有几列的表。主键是id,自动生成。休眠:如果还没有在表中保存

考虑以下代码,它可以执行不止一次:

session.save(x); 

对象x具有相同的内容,说如果我们不作任何修改运行程序的两倍。结果,该对象在表格中出现两次,其中有不同的id s。

如何修改此代码以避免重复插入?

我认为使用session.get,但这需要知识id

我还考虑设置x以外的其他所有字段的标准,但这是要求麻烦:有一天我会添加另一列,并忘记将其添加到条件。有没有一个很好的解决方案?

回答

1

如果你做一个

YourObject cachedX = (YourObject)session.merge(x); 

cachedX现在有生成的ID。显然你必须保持它,你很可能仍然需要提出重复规则。

+0

生成的id是什么?表中可能已经或可能没有'x'。你可以分解它:如果第一次插入“x”,那么'id'会是什么?第二次? – user443854 2013-02-20 22:56:45

+1

hibernate中的合并方法定义如下: “将给定对象的状态复制到具有相同标识符的持久对象上,如果当前没有与会话相关联的持久实例,则它将被加载,如果给定实例未保存,保存副本并将其作为新的持久实例返回。“ – 2013-02-21 01:22:27

+0

谢谢,您评论中的解释非常清楚。但是我仍然在猜测“显然你必须保持它,你很可能仍然需要提出重复规则”。你能解释一下你的意思吗?更好的是,更新答案。 – user443854 2013-02-21 13:39:08