当前位置: 首页 > 知识库问答 >
问题:

JoinColumn注释在同一个表上创建列

苏边浩
2023-03-14

我是Hibernate的新手,正在尝试学习它。我对@JoinCol列的用法感到困惑。我知道它创建了一个列来关联两个实体。我尝试过的是:

  1. 有两个阶级的人和房子
  2. 个人阶级有一套与一个家庭有关系的房子

当面授课:

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "person_id")  // this creates a FK on house table  with this name
    private Set<House> houses = new HashSet<House>();

这将在House表上创建一个名为person_id的列。

内部课程:

    @ManyToOne
    @JoinColumn(name = "house_id")
    private Person person;

这将在house表上再次创建house\u id列。但我希望能在Person表上看到这个专栏。为什么会这样?

我在想@JoinColumn annotation会在表上创建一个连接列,这就是我们应用此注释的实体。所以在本例中,对于Person类,它在house表上创建Person_id,对于第二个,我希望在Person类上看到house_id。但它也会在家里的桌子上创造它。所以我很困惑。

那么它实际上是如何工作的呢?

共有2个答案

微生新霁
2023-03-14

假设house有一个名为person\u id的列,尝试将@JoinColumn(name=“house\u id”)替换为@JoinColumn(name=“person\u id”)

然后删除@JoinColumn(name=“person_id”),并在OneToMany注释中添加属性mappedBy

@OneToMany(cascade = CascadeType.ALL, mappedBy = "person")

这样Hibernate将搜索所有人属性与当前person_id匹配的房子

程智明
2023-03-14

@JoinColumn创建一个有意义的列。

对于带有@JoinColumn@OneToMany,join列需要转到目标实体表,即House。如果该列是在源实体表中创建的,即个人,则一个人只能分配一个房屋,因此它不会是一对多关联。

相反,对于带有@JoinColumn@manytone,join列需要转到源实体(即House)。如果该列转到Person表,而您将给定的人分配到一所房子,则为Person。HOUSE_ID列将设置为该房屋的ID。然后,将无法将另一栋房子分配给同一个人(因为person.house_ID列已经被“使用”)。这基本上与之前的问题相同,但从协会的“内部”方面来看。

 类似资料:
  • 问题内容: 一个项目需要大量使用以下Jackson注释组合。因此,有没有一种方法可以创建另一个注释来避免丑陋的复制/粘贴: 更新: 我已经尝试过了,但是没有成功:-( 问题答案: 使用解决问题:

  • null 最终产品应该如下所示: 在上面的例子中,@public instance将只有uniqueKey、gtin、printedGtin作为属性。

  • 问题内容: 是否存在列注释语法,该语法允许我直接在创建表语句(即,内联)中声明列的位置指定列注释?该11克规范没有提到任何东西,在另一页中提到的东西,但我无法得到它的工作。创建表后有一种指定注释的方法,但是我认为将注释与字段定义分开很烦人。我正在寻找这样的东西(不起作用): 问题答案: 恐怕“烦人”的语法是这样做的唯一方法。SQL Server,PostgreSQL和DB2使用相同的语法(尽管据我

  • 我刚开始冬眠。我有一个与帐户和交易之间的双向映射的单人关系。我没有在这两个类中使用@JoinColumn,而在非所有者Account类中使用@MappedBy。一切正常。使用内存数据库中的H2,在事务表中创建新的联接列。那么@JoinColumn在OneToMany关系中有什么用--它仅仅用于单向映射吗?下面是代码。我还阅读了使用JPA@OneTomany关联时@JoinColumn和mapped

  • 问题内容: 我试图在一个元素上拍两个或多个相同类型的注释,在这种情况下是方法。这是我正在使用的近似代码: 编译以上内容时,javac抱怨重复的注释: 这样根本不可能重复注释吗?从学步上讲,上面的两个@Foo实例是否由于内容不同而不同吗? 如果上述方法不可行,有哪些可能的解决方法? 更新:我被要求描述我的用例。开始。 我正在建立一种语法糖化机制,以“映射” POJO到文档存储(例如MongoDB)。

  • 是否可以声明性地在类的字段上指定验证约束,以便其中一些约束只适用于某些层(或者被某些层忽略)? 其中是JSR 303 anotation REST API层 此处不存在 null