[英]Adding entity with @OneToMany and @ManyToOne relation
我有兩個實體
@Entity
public class Person{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(nullable = false)
@OneToMany(mappedBy = "owner",cascade=CascadeType.ALL)
private List<Number> numbers
//getters and setters
}
@Entity
public class Number{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne
@JoinColumn("owner_id")
private Person owner;
//getters and setters
}
我創造人
Person p = new Person()
Number n1 = new Number()
Number n2 = new Number()
n1.setOwner(p)
n2.setOwnet(p)
List<Number> numbers = new ArrayList<>();
numbers.add(n1);
numbers.add(n2);
p.setNumbers(numbers)
send(p);
並將其作為JSON發送到我的控制器
@RequestMapping(value = "/add", method = RequestMethod.POST)
@ResponseBody
public void addFramework(@RequestBody List<Person> persons){
System.out.println("=============");
/*for( Persons person: persons){
for(Number n: person.getNumbers()){
n.setOwner(owner);
}
}*/
repository.saveAll(persons);
}
沒有注釋的代碼, Person
和Number
確實會保存到數據庫中,但是Number
對owner的引用為null
。
在發送給控制器之前,是否必須在控制器中的每個Number對象中手動設置對所有者的引用?
感謝幫助。
在您發布的示例中-Number是一對多關系的所有者(不具有mappingBy屬性的實體是所有者)。 只有在擁有實體上設置了對另一個對象的引用時,JPA才會保留實體之間的關系。
這也意味着您不必將所有Number
對象都添加到person.numbers列表中。 以下代碼也將能夠保持這種關系。
Person p = new Person();
p.setId(1L);
Number n1 = new Number();
Number n2 = new Number();
n1.setOwner(p);
n2.setOwner(p);
personRepository.save(p);
numberRepository.save(n1);
numberRepository.save(n2);
Person retrievedPerson = personRepository.findById(1L).get();
System.out.println(retrievedPerson.getNumbers().size()); // prints 2
雖然以下代碼將不會持久保留該關系,因為Person不是該關系的所有者
Person p = new Person();
p.setId(1);
Number n1 = new Number();
Number n2 = new Number();
List<Number> numbers = Arrays.asList(n1, n2);
p.setNumbers(numbers);
personRepository.save(p);
numberRepository.save(n1);
numberRepository.save(n2);
Person retrievedPerson = personRepository.findById(1L).get();
System.out.println(retrievedPerson.getNumbers().size()); // prints 0
檢查此答案以獲取更多詳細信息-https://stackoverflow.com/a/21068644/1377058
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.