我有一个名为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将执行以下操作:
将x
插入Expression
表,其中id = 1且data =“0”
将y
插入Expression
表,其中id = 2且data =“1”
将z
插入Expression
表,其中id = 3,data =“a + b”
使用expression_id = 3和dependencies_id = 1在“Expression_Expression”表中插入一行。(使z
成为x
的依赖项。)
但是当它尝试在Expression_Expression
表中插入一行,其中expression_id = 3且dependencydencies_id = 2(使z
成为y
的依赖项)我得到重复的输入错误。
我希望能够在Expression_Expression
表格中拥有多个具有相同expression_id
值的行。
非常感谢任何帮助!
答案 0 :(得分:2)
你应该在这里使用@ManyToMany关系