JPA mappedBy不会持久化实体关系

时间:2016-01-25 20:33:25

标签: java hibernate jpa

例如,我有以下实体: 房间实体:

@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注释中,但是......我该怎么办?

2 个答案:

答案 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并更新RoomRoom不会为您更新外键。