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

ManyToMany关系不创建主键

  •  1
  • Javi  · 技术社区  · 15 年前

    我在两个类之间有很多关系:ClassA和ClassB,但是当这个关系的表(称为objectA_objectB的表)上没有主键时。

    在我的班级里,我有以下几项:

    @ManyToMany(fetch=FetchType.LAZY)
    @OrderBy(value="name")
    @JoinTable(name="objectA_objectB",
            joinColumns=
                @JoinColumn(name="idObjectA", referencedColumnName="id"),
            inverseJoinColumns=
                @JoinColumn(name="idObjectB", referencedColumnName="id")
    )
    private List<ClassB> objectsB;
    

    在我的班级里,我有相反的关系

    @ManyToMany
    List<ClassA> objectsA;
    

    我只想把两个id都设为主键,但我需要像这样更改列的名称。 为什么PK不见了?我如何定义它?

    如果这有帮助的话,我使用JPA 2.0hibernate实现。

    谢谢。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Community Mohan Dere    8 年前

    你是对的

    我已经采取了与你的问题相同的方法。而且,实际上,Hibernate不会生成 混合成的 如预期的主键。

    因此,如果要生成它的复合主键,应该将@manytomy拆分为@OneToMany-@ManyToOne关系。见 here 如何。。。

    更新

    当有双向关系时,必须使用mappedBy属性设置关系的反面

    // ClassA
    
    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="objectA_objectB",
        joinColumns=
            @JoinColumn(name="idObjectA", referencedColumnName="id"),
        inverseJoinColumns=
            @JoinColumn(name="idObjectB", referencedColumnName="id")
    )
    private List<ClassB> objectsB;
    

    ...

    // ClassB
    
    // You do not specify the foreign key column here (it is mapped by the other side)
    @ManyToMany(mappedBy="objectsB")
    List<ClassA> objectsA;
    

    mappedBy=“objectsB”说

    查看ClassA中的objectsB属性是否包含me,如果包含,则将我们的关系保存在objectA_objectB表中