0

私は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
yExpression
zExpression
zx

しかし、Expression_Expressionexpression_id=3およびdependencies_id=2(zの依存関係になりますy)の行をテーブルに挿入しようとすると、重複エントリエラーが発生します。

同じ値の複数の行をExpression_Expressionテーブルに含めることができるようにしたいと思います。expression_id

どんな援助も大歓迎です!

4

1 に答える 1

2

ここでは@ManyToManyリレーションを使用する必要があります

于 2010-01-08T15:20:21.263 に答える