У меня есть приложение гибернации, в котором я хочу сохранить владельца.
Один владелец может иметь много животных
(внутри субъекта-владельца)
@OneToMany(mappedBy = "owner")
private List<Animal> animals;
(внутри животного существа)
@ManyToOne
private Owner owner;
У меня есть хранилище, где я сохраняю своего владельца,
@Override
public Owner create(String name, String email, int age,
List<Animal> animals) {
Owner owner = new Owner(name, email, age, animals);
for(Animal animal: animals){
animal.setOwner(owner);
}
getEntityManager().persist(owner);
return owner;
}
}
владелец сохраняется правильно, но внешний ключ не задан в таблице животных.
Я использовал отладчик, чтобы проверить, правильно ли указан владелец для животного, которым оно является.
Сначала я попытался сохранить животное, которое вызвало ошибку
for(Animal animal: animals){
animal.setOwner(owner);
getEntityManager().persist(animal)
} //caused an error
поэтому я подумал об использовании каскадного типа, чтобы животное получило идентификатор владельца в базу данных,
@OneToMany(cascade = CascadeType.ALL)
private List<Animal> animals;
это также вызвало ошибку
"cause": {
"detailMessage": "detached entity passed to persist: com.tolboll.zoo.data.entities.Animal",
"stackTrace": [],
"suppressedExceptions": []
},
как мне сделать так, чтобы владелец правильно сохранился в животном существе?
EDIT:
вот тело JSON, переданное в
{
"name": "kristoffer",
"email": "Kristofferlocktolboll@gmail.com",
"age": 23,
"animals": [{
"id": 1,
"name": "Simba",
"weight": 110,
"species": {
"id": 1,
"name": "Lion"
}
}]
}