例如,我有以下实体: 房间实体:
@Entity
public class Room extends Base {
@OneToMany(mappedBy = "room")
private List<Person> persons;
//getters and setters
}
Person实体:
@Entity
public class Person extends Base {
@ManyToOne
private Room room;
private String name;
//getters and setters
}
如果我将人员添加到房间的人员名单然后坚持,则房间被添加,但是人不是。我想,足够的是将mappedBy
参数添加到OneToMany
注释中,但是......我该怎么办?
答案 0 :(得分:2)
您需要在CascadeType=PERSIST or ALL
上设置@OneToMany
。并在room
类中设置Person
变量以在Person表中填充外键。
答案 1 :(得分:1)
相反,将Room
设置为Person
实例的 room 字段:
Room room = ...;
person.setRoom(room);
// persist the person
使用mappedBy
,指定哪个实体拥有关系。更新这两个实体之间的关系是拥有方的责任。
在您的示例中,Person
拥有该关系,因此他有责任更新外键,而不是Room
,因此当您向人员列表添加Person
时在Room
并更新Room
,Room
不会为您更新外键。