Hibernate JoinColumn注释在同一个表上创建列
我刚进入冬眠状态,正在努力学习。我对@JoinColumn的用法感到困惑。我知道它会创建一个列来关联两个实体。我尝试的是:Hibernate JoinColumn注释在同一个表上创建列,hibernate,jpa,orm,hibernate-mapping,Hibernate,Jpa,Orm,Hibernate Mapping,我刚进入冬眠状态,正在努力学习。我对@JoinColumn的用法感到困惑。我知道它会创建一个列来关联两个实体。我尝试的是: 有两个阶级的人和房子 个人阶级有一套一对一关系的房子 亲自上课: @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "person_id") // this creates a FK on house table with this name private Set<House
@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
表上再次创建house\u id
列。但我希望在Person
表上看到这个专栏。为什么会这样
我想@JoinColumn annotation会在表上创建一个连接列,这就是我们应用此注释的实体。所以在本例中,对于Person类,它在house表上创建Person\u id,对于第二个,我希望在Person类上看到house\u id。但它也会在家里的桌子上创造它。所以我很困惑
那么它实际上是如何工作的呢?
@JoinColumn
在有意义的地方创建一个列
对于带有@JoinColumn
的@OneToMany
,连接列需要转到目标实体表,即House
。如果该列是在源实体表中创建的,即个人
,则一个人只能分配一个房屋,因此它不会是一对多关联
相反,对于带有
@JoinColumn
的@ManyToOne
,连接列需要转到源实体(即House
)。如果该列转到Person
表,并且您将给定的人分配给一所房子,Person.house\u ID
列将设置为该房子的ID。然后,将无法将另一所房子分配给同一个人(因为person.house\u ID
列已经被“使用”)。这本质上与之前的问题相同,但从协会的“内部”方面来看 假设house有一个名为person\u id的列,尝试将@JoinColumn(name=“house\u id”)
替换为@JoinColumn(name=“person\u id”)
然后删除@JoinColumn(name=“person\u id”)
并在OneToMany注释中添加属性mappedBy
@OneToMany(cascade = CascadeType.ALL, mappedBy = "person")
通过这种方式,hibernate将搜索person属性与当前person_id匹配的所有房屋您是否尝试指定属性
mappedBy
,例如:@OneToMany(mappedBy=“houses”)
?是的,我尝试过,这样实际上就不那么混乱了,非常感谢。我搜索了一整天。非常感谢,先生:)
@OneToMany(cascade = CascadeType.ALL, mappedBy = "person")