この場合、2つのクラスがあります。1つはメモクラスを埋め込みます:
@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
ただし、エンティティをフラッシュしない場合は発生しません。
このエラーは通常、1つ/多くの関係で発生するようです。しかし、ここではそうではありません。これもプレイではありません!フレームワーク。通常のSpring/JPA/Hibernateです。
Spring 3.1.1.RELEASE、Hibernate 4.1.4.Final、JDK7u7、Linux64。
誰かが以前にこれを持っていましたか?または、エラーが実際に何を意味するのかについての合理的な説明はありますか?
更新:flush()に関連しています
フラッシュが1つしかない場合は機能するようです。中間フラッシュが実行されると、例外がスローされます。厄介な解決策は、データを永続化する最初のメソッドの終了時にフラッシュすることです。永続化のための囲まれたメソッド呼び出しは、スレッドローカル変数をチェックして、フラッシュする必要があるかどうかを確認します。
しかし、これには確かにはるかに良い方法があります...