【发布时间】:2017-02-07 03:26:30
【问题描述】:
我在更新作为 @OneToMany 关系中集合的一部分创建的对象时遇到问题。
假设我有一个非常简单的域模型,由房屋和居住在这些房屋中的人组成:
房子:
@Entity
public class House {
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Person> persons;
public void addPerson(Person p) {
persons.add(p);
public Set<Person> getPersons() {
return persons;
}
}
人:
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
@ManyToOne
private House house;
}
我有一个用于 House 的 Spring Boot JPA 存储库,以及一个带有以下方法的 HouseService:
@Transactional
public Person addPerson(Long houseId) {
House house = houseRepository.findOne(houseId);
Person person = new Person();
house.addPerson(person);
houseRepository.save(house);
return person;
}
调用上述方法确实会创建一个新的 Person 并将该人保存在数据库中,但返回的 Person 实例没有设置 ID(即 addPerson().getId() 返回 null)。我可以让服务返回具有持久版本 ID 的人员实例吗?
我想对使用服务的 addPerson() 方法创建的 Person 进行更改,并能够在以后保留这些更改。
【问题讨论】:
-
也许你应该有一个双向关系房子可以有人但人没有房子
-
抱歉,我把它从代码中遗漏了——存在双向关系,我已经更新了问题以显示这一点。谢谢。
-
也有级联?
-
是的,级联 = CascadeType.ALL
-
将
mappedBy="house"添加到您的@OneToMany。我也将@JoinColumn(name = "ID_HOUSE")定义为@ManyToOne一侧。
标签: java nhibernate spring-data persistence spring-data-jpa