java - 多对多关系不创建主键

标签 java hibernate persistence jpa-2.0

我在两个类之间有一个多对多关系: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 实现,如果这有帮助的话。

谢谢。

最佳答案

你说得对

我已经采取了与您的问题所示相同的方法。事实上,Hibernate 并没有按预期生成其复合主键。

因此,如果您想生成其复合主键,您应该将 @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"说

See whether objectsB property in ClassA contains me and, if so, save our relationship in objectA_objectB table

关于java - 多对多关系不创建主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2598380/

相关文章:

使用 XMLEncoder 的 Java Bean 持久性

java - 在 mongo 集合上使用时,Spring 数据版本注释不会递增

java - 获取特定语言的 imdb 电影标题

java - jflex 中的元音正则表达式

java - 在不启动事务的情况下通过 Hibernate 对 MySQL 数据库运行查询的含义是什么?

java - Java 中的持久数据结构

java - 如何在事件调度线程中同时运行两个组件?

java - 定义在将 Spring 事务管理与 hibernate 一起使用时不在事务中运行的方法

java - 使用 Java、Hibernate 将唯一行插入数据库表

java - 获取整棵树的 JPA 查询