【问题标题】:ManyToMany Relation does not create the primary key多对多关系不创建主键
【发布时间】:2010-04-08 08:11:38
【问题描述】:

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

在我的 ClassA 中,我有以下内容:

@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;

在我的 ClassB 中,我有相反的关系

@ManyToMany
List<ClassA> objectsA;

我只想为两个 id 创建一个主键,但我需要像我一样更改列的名称。 PK怎么不见了?如何定义?

如果有帮助,我使用 JPA 2.0 Hibernate 实现。

谢谢。

【问题讨论】:

    标签: java hibernate persistence jpa-2.0


    【解决方案1】:

    你是对的

    我采用了与您的问题相同的方法。而且,事实上,Hibernate 并没有像预期的那样生成它的 composite 主键。

    所以如果你想生成它的复合主键,你应该把你的@ManyToMany 拆分成@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 属性是否包含我,如果是,则将我们的关系保存在 objectA_objectB 表中

    【讨论】:

    • @Arthur Ronald F D Garcia 它仍然与 mappedBy 相同
    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多