在这种情况下,我有两个课程。一个嵌入一个备忘录类:
@Entity
class Project {
...
@Embed
private Memo memo;
...
}
和可嵌入的备忘录类:
@Embeddable
public class Memo implements Serializable {
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "MEMO_LINES")
@MapKeyColumn(name = "TITLE",nullable = false)
@Column(name = "VAL",nullable = false)
private Map<String, String> memoLines = new HashMap<String, String>();
}
刷新 Project 的合并实例时,我收到错误消息:
Caused by: org.hibernate.HibernateException: Found two representations of same collection: Project.memo.memoLines
但是,在不刷新实体时不会发生。
此错误似乎通常发生在一个/多个关系中。但这里不是这样。这也不是戏剧!框架。只是普通的 Spring/JPA/Hibernate。
Spring 3.1.1.RELEASE、Hibernate 4.1.4.Final、JDK7u7、Linux 64。
有人以前有过这个吗?或者对错误实际含义的任何合理解释?
更新:它与flush()有关
如果只有一次冲洗,它似乎有效。如果完成了中间刷新,那么它会抛出异常。一个混乱的解决方案是在第一种方法持久化数据的出口处刷新。封闭的方法调用持久检查线程局部变量以查看它们是否应该刷新。
但肯定有更好的方法来做到这一点......