gpt4 book ai didi

java - 更新作为 @OneToMany 关系的一部分创建的项目

转载 作者:行者123 更新时间:2023-11-30 07:07:58 24 4
gpt4 key购买 nike

我在更新作为 @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 进行更改,并能够在稍后阶段保留这些更改。

最佳答案

如果你想获取 Person 的 id,你可以创建 PersonRepository。就像这个questshion .

person = personRepository.save(person);
personRepository.flush();
id=person.getId();

如果你想在持久化之前获取人员Id,那么你必须生成id并手动设置它。

关于java - 更新作为 @OneToMany 关系的一部分创建的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39759526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com