私は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'テーブル( 。の依存関係を作成)Expression
y
Expression
z
Expression
z
x
しかし、Expression_Expression
expression_id=3およびdependencies_id=2(z
の依存関係になりますy
)の行をテーブルに挿入しようとすると、重複エントリエラーが発生します。
同じ値の複数の行をExpression_Expression
テーブルに含めることができるようにしたいと思います。expression_id
どんな援助も大歓迎です!