2016-01-25 30 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