如果尝试添加它,Hibernate如何确定记录是否已经存在?

时间:2012-02-09 13:13:23

标签: java hibernate

我将一系列文件加载到我的应用程序中,并检查每个文件以查看它是否包含任何图像,如果是,我会生成图像数据的校验和,并检查图像是否已存在于数据库中,如果不是我把它添加到数据库。所有数据库都是通过Hibernate完成的。

当我的代码是单线程但当它是多线程的,通过调用来检查图像是否在数据库中时可以返回false,但是当我尝试插入它时它可能已被另一个线程添加,所以我工作正常然后必须处理异常并再次尝试获取图像,以便我可以返回它。

在Hibernate中我能做些什么来帮助我,所以我不需要做额外的编码工作吗?

2 个答案:

答案 0 :(得分:1)

如果校验和是持久图像的数据库密钥(您没有使用自动生成的密钥),则可以使用Session.merge()

  

将给定对象的状态复制到具有相同标识符的持久对象上。如果当前没有与会话关联的持久性实例,则将加载该实例。返回持久化实例。如果给定实例未保存,请保存副本并将其作为新的持久实例返回。给定的实例不会与会话关联。

有关详细信息,请参阅Modifying detached objectsHibernate referenceHibernate Core JavaDocs

答案 1 :(得分:0)

transactions + locking。阅读Transaction and Concurrency教程here