Java ManyToMany关系不创建主键

Java ManyToMany关系不创建主键,java,hibernate,persistence,jpa-2.0,Java,Hibernate,Persistence,Jpa 2.0,我在两个类之间有很多关系:ClassA和ClassB,但是当这个关系的表(称为objectA_objectB的表)上没有主键时 在我的A班,我有以下几点: @ManyToMany(fetch=FetchType.LAZY) @OrderBy(value="name") @JoinTable(name="objectA_objectB", joinColumns= @JoinColumn(name="idObjectA", referencedColumnN

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

在我的A班,我有以下几点:

@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(fetch=FetchType.LAZY)
@OrderBy(value=“name”)
@JoinTable(name=“objectA\u objectB”,
连接柱=
@JoinColumn(name=“idObject”,referencedColumnName=“id”),
反向连接柱=
@JoinColumn(name=“idObjectB”,referencedColumnName=“id”)
)
私人名单对象b;
在我的B班,我有相反的关系

@ManyToMany
List<ClassA> objectsA;
@manytomy
列出对象a;
我只想为这两个id创建一个主键,但我需要像这样更改列的名称。 为什么PK不见了?我如何定义它

如果有帮助的话,我使用JPA2.0 Hibernate实现

谢谢。

你说得对

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

因此,如果要生成其复合主键,应将@ManyToMany拆分为@OneToMany-@ManyToOne关系。看看如何

更新

当具有双向关系时,必须使用“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;
//ClassA
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“objectA\u objectB”,
连接柱=
@JoinColumn(name=“idObject”,referencedColumnName=“id”),
反向连接柱=
@JoinColumn(name=“idObjectB”,referencedColumnName=“id”)
)
私人名单对象b;

//ClassB
//此处不指定外键列(它由另一端映射)
@许多(mappedBy=“objectsB”)
列出对象a;
mappedBy=“objectsB”表示

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

你说得对

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

因此,如果要生成其复合主键,应将@ManyToMany拆分为@OneToMany-@ManyToOne关系。看看如何

更新

当具有双向关系时,必须使用“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;
//ClassA
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“objectA\u objectB”,
连接柱=
@JoinColumn(name=“idObject”,referencedColumnName=“id”),
反向连接柱=
@JoinColumn(name=“idObjectB”,referencedColumnName=“id”)
)
私人名单对象b;

//ClassB
//此处不指定外键列(它由另一端映射)
@许多(mappedBy=“objectsB”)
列出对象a;
mappedBy=“objectsB”表示

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


@阿瑟·罗纳德·F·D·加西亚,同样的事情也会发生mappedBy@Arthur罗纳德·F·D·加西亚对马佩比也是如此