使用Hibernate 4.0我有三个休眠实体:重复使用Hibernate的关键问题
歌,封面作品,CoverImage
歌代表的音乐文件,CoverImage代表图像和封面作品用于涉及CoverImages歌曲,一歌曲可以包含多个封面图片。
Song和CoverArt有一个由Hibernate自动生成的主键。但Cover Image主键手动完成,构造为图像数据的MessageDigest。我这样做是因为相同的图像可以被许多歌曲使用,我不希望在数据库中多次存储同一图像的单独实例,这也是因为可以从数据库中构建密钥,我可以在数据库中检查文件是否已经存在存在,如果是的话,检索它而不是构建一个新的CoverImage。
问题是我的应用程序是多线程的,Hibernate实际上并没有将事情直接提交给数据库,所以线程1可能会检查coverimage是否已经在数据库中,发现它并没有构建新的歌曲,CoverArt和CoverImage对象。但是,数据被提交到CoverImage可能是由一个单独的线程加入数据库的时间,所以我得到一个例外,因为我的新CoverImage使用具有相同的密钥 作为现有
林
session.merge(coverImage);
所以我认为会处理这个,但它似乎没有帮助
添加更多代码片段。 – 2012-04-16 11:40:24