【问题标题】:JPA @OneToMany relationship table does not have enough columnsJPA @OneToMany 关系表没有足够的列
【发布时间】:2012-02-23 01:12:36
【问题描述】:

在我的应用中,我有以下@OneToMany 关系:

@Entity
public class ReservedLessons extends ReservedSessions implements Serializable {

    @OneToMany(cascade={CascadeType.PERSIST})
    private List<Lesson> reservedLessons;

}

@Entity
public class Lesson extends Sessions implements Serializable { ... }

我希望看到表格reservedlessons_lesson 有两列ReservedLessons_IDreservedLessons_ID。但是,当我运行该应用程序时,该表只有 1 列 ReservedLessons_ID

在我的应用程序中,我还有其他几个 @OneToMany 关系,它们都有一个包含 2 列的表。如果你能告诉我我做错了什么,我将不胜感激。

【问题讨论】:

  • 为什么期望看到有 2 列的表 reservedlessons_lessons?您是否配置了持久性以创建数据库表?否则我无法理解你的句子。能否也展示一下 ReservedSessions Entity 的定义?
  • @perissf:我希望看到一个有 2 列的表,因为有了 @OneToMany 关系,JPA 会自动创建该表来记录关系。
  • 你的意思是加入表?因为你还没有定义它使用一个。
  • @DataNucleus:我还有其他@OneToMany 关系,我也没有指定任何内容,但他们有自己的表格。事实上,这个也有一个表,但它似乎缺少 1 列。
  • 根据 JPA 规范,仅带有 OneToMany 注释且没有 JoinTable 注释不应给出连接表。你没有说哪个是你的 JPA 实现

标签: java jpa relationship jpa-2.0


【解决方案1】:

您应该在映射的另一端使用 @ManyToOne 以使其成为双向 (example)

【讨论】:

  • 我不打算创建双向关系。
【解决方案2】:

我发现了问题。当我命名我的ReservedLessons 实体及其reservedLessons 属性时,我很粗心。由于 MySQL 中的 2 个列名实际上是相同的,因此我的连接表缺少它应该具有的列。在我将ReservedLessons 更改为ReservedLesson 后,我的连接表现在有两列ReservedLesson_IDreservedLessons_ID,正如预期的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多