我有一个名为 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
y
Expression
z
Expression
z
x
Expression_Expression
但是,当它尝试在expression_id = 3 和 dependencies_id = 2的表中插入一行(使其z
成为依赖项y
)时,我得到一个重复的条目错误。
我希望能够在Expression_Expression
表中有多个具有相同expression_id
值的行。
任何帮助将不胜感激!