当使用hibernate时,当我有一个包含嵌入式B集合的实体A时,我得到一个ConcurrentModificationException,其中B的每个元素都包含一个字符串集合。换句话说,A是实体类,B是可嵌入类。 A有一个B的集合。每个B都有它自己的字符串集合。
这似乎是一个已知的hibernate错误(HHH-4313),描述于http://opensource.atlassian.com/projects/hibernate/browse/HHH-4313
对我来说不幸的是,错误优先级很低,自从它于07年3月29日提交以来它还没有得到解决。所以我不希望它能在短期内得到解决。但是,如果不将B转换为实体类,我一直无法找到解决方法,我真的不想这样做。
是否有人为此特定错误找到了解决方法?
答案 0 :(得分:0)
这里的“错误”是ConcurrentModificationException
被抛出而不是更优雅的事实 - 不事实上元素集合不支持嵌入式集合。
后者是一个设计考虑因素,我不会屏住呼吸等待它得到修复;很可能直到下一个专业(我的意思是重大)释放才会发生 - 或者全部拉开。
潜在的问题是元素的收集不会对可以识别的个别元素施加任何限制;因此,没有明确的方法将关联从嵌入式集合映射到父级。在某些情况下,这可能是可能的(具有明确定义的业务密钥的列表/集合),但最终为了使这成为可能,您正在考虑将实体语义引入集合元素而不实际使它们成为实体,这看起来相当无意义
解决方案很简单 - 让您的B
成为一个真实的实体。您可以使用all-delete-orphan
级联样式维护类似于集合元素的生命周期,并且您可以享受嵌入式集合的启动。