代码之家  ›  专栏  ›  技术社区  ›  Han

当我只需要一个主键时,Hibernate会创建两个主键

  •  0
  • Han  · 技术社区  · 15 年前

    我有一个叫做“表情”的冬眠课程(这里简化了以供您观赏):

    @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 值。

    如有任何帮助,我们将不胜感激!

    1 回复  |  直到 15 年前
        1
  •  2
  •   Michael Bavin    15 年前

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