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

Java 如果尝试添加记录,Hibernate如何确定该记录是否已经存在?,java,hibernate,Java,Hibernate,我将一系列文件加载到我的应用程序中,并检查每个文件是否包含任何图像,如果包含,则生成图像数据的校验和,并检查图像是否已存在于数据库中,如果不存在,则将其添加到数据库中。所有的数据库工作都是通过Hibernate完成的 当我的代码是单线程时,这很好,但是当它通过调用多线程来检查图像是否在数据库中时,可能会返回false,但是当我尝试插入它时,它可能已经被另一个线程添加,因此我必须处理异常并再次尝试获取图像,以便返回它 在Hibernate中,我可以做些什么来帮助我,这样我就不必做额外的编码工作了吗

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

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


在Hibernate中,我可以做些什么来帮助我,这样我就不必做额外的编码工作了吗?

。阅读事务和并发教程。

。阅读事务和并发教程。

如果校验和是持久化映像的数据库键(您没有使用自动生成的键),则可以使用:

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


有关详细信息,请参阅和。

如果校验和是持久化映像的数据库键(您没有使用自动生成的键),则可以使用:

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

有关详细信息,请参见和