私はExpressionと呼ばれるHibernateクラスを持っています(ここではあなたの閲覧を楽しむために簡略化されています):
@Entity
public class Expression {
@Id
@GeneratedValue
private long id;
private String data;
@OneToMany(fetch=FetchType.EAGER)
@Cascade({CascadeType.MERGE, CascadeType.PERSIST})
private Set<Expression> dependencies;
}
これにより、2つのテーブルExpression(id, data)とが作成されますExpression_Expression(expression_id, dependencies_id)。ただし、Hibernateはexpression_id列とdependencies_id列の両方を主キーとして設定するため、dependencies_idを複製することはできません。これは、私が望むものです。
たとえば、3つの式がある場合:
Expression x = new Expression("0");
Expression y = new Expression("1");
Expression z = new Expression("x + y");
Set<Expression> tmp = new HashSet<Expression>();
tmp.add(x);
tmp.add(y);
z.setDependencies(tmp);
// Persist x, y, and z.
次に、Hibernateは次のことを実行します。
id=1およびdata="0"xのテーブルに挿入しますid=2およびdata="1"のテーブルに
挿入しますid=3およびdata="a+b"のテーブルに
挿入します
'に行を挿入しますexpression_id=3およびdependencies_id=1のExpression_Expression'テーブル( 。の依存関係を作成)ExpressionyExpressionzExpressionzx
しかし、Expression_Expressionexpression_id=3およびdependencies_id=2(zの依存関係になりますy)の行をテーブルに挿入しようとすると、重複エントリエラーが発生します。
同じ値の複数の行をExpression_Expressionテーブルに含めることができるようにしたいと思います。expression_id
どんな援助も大歓迎です!