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;
}

这将创建两个表,Expression(id, data)并且Expression_Expression(expression_id, dependencies_id). 但是,Hibernate 将 expression_id 和 dependencies_id 列都设置为主键,所以我不能有重复的 dependencies_id,这正是我想要的。

例如,如果我有三个表达式:

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_Expression' 表,其中 expression_id = 3 和 dependencies_id = 1。(制作的依赖项。)Expression
yExpression
zExpression
zx

Expression_Expression但是,当它尝试在expression_id = 3 和 dependencies_id = 2的表中插入一行(使其z成为依赖项y)时,我得到一个重复的条目错误。

我希望能够在Expression_Expression表中有多个具有相同expression_id值的行。

任何帮助将不胜感激!

4

1 回答 1

2

你应该在这里使用@ManyToMany 关系

于 2010-01-08T15:20:21.263 回答