我有一个叫做“表情”的冬眠课程(这里简化了以供您观赏):
@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_i d和dependencies_i d列都设置为主键,这样我就不能有重复的dependencies_i d,这就是我想要的。
例如,如果我有三个表达式:
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
进入
表情
id=2和data=“1”的表
插入
z
进入
表情
id=3且data=“a+b”的表
将一行插入到“expression_expression”表中,其中expression_id=3,dependencies_id=1。(制造
Z
依赖于
X
)
但当它试图在
Expression_Expression
表达式为“id=3”且依赖项为“id=2”的表(使
Z
变成一个依赖
Y
)我收到一个重复的输入错误。
我想在
表达式\表达式
相同的桌子
expression_id
值。
如有任何帮助,我们将不胜感激!