我将一系列文件加载到我的应用程序中,并检查每个文件以查看它是否包含任何图像,如果是,我会生成图像数据的校验和,并检查图像是否已存在于数据库中,如果不是我把它添加到数据库。所有数据库都是通过Hibernate完成的。
当我的代码是单线程但当它是多线程的,通过调用来检查图像是否在数据库中时可以返回false,但是当我尝试插入它时它可能已被另一个线程添加,所以我工作正常然后必须处理异常并再次尝试获取图像,以便我可以返回它。
在Hibernate中我能做些什么来帮助我,所以我不需要做额外的编码工作吗?
答案 0 :(得分:1)
如果校验和是持久图像的数据库密钥(您没有使用自动生成的密钥),则可以使用Session.merge()
:
将给定对象的状态复制到具有相同标识符的持久对象上。如果当前没有与会话关联的持久性实例,则将加载该实例。返回持久化实例。如果给定实例未保存,请保存副本并将其作为新的持久实例返回。给定的实例不会与会话关联。
有关详细信息,请参阅Modifying detached objects,Hibernate reference和Hibernate Core JavaDocs。
答案 1 :(得分:0)
transactions + locking。阅读Transaction and Concurrency教程here。