2016-01-25 32 views
0

例如,我有以下实体: 客房实体:JPA的mappedBy不与关系长期以实体

@Entity 
public class Room extends Base { 

@OneToMany(mappedBy = "room") 
private List<Person> persons; 
//getters and setters 
} 

和人身实体:

@Entity 
public class Person extends Base { 

@ManyToOne 
private Room room; 

private String name; 
//getters and setters 
} 

如果我加人到房间的人名单然后坚持,房间被添加,但人不是。我想,足够的是将mappedBy参数添加到OneToMany注释,但是..我应该怎么做呢?

回答

1

却反其道而行之,设置RoomPerson实例的房间领域:

Room room = ...; 
person.setRoom(room); 
// persist the person 

随着mappedBy,您可以指定该实体拥有的关系。更新这两个实体之间的关系是拥有方的责任。

在您的例子中,Person拥有的关系,所以这是他的责任来更新外键,不Room的,所以当你在Room添加Person的人员名单,并更新RoomRoom不会为你更新外键。

+1

哦,谢谢,伙计。 – Squeez

2

您需要在@OneToMany上设置CascadeType=PERSIST or ALL。并在Person类中设置room变量来填充Person表中的外键。

+0

我真的需要设置这个变量? JPA无法填充fk本身查看mappedBy?这只是我需要的 – Squeez