Возникает ошибка при добавлении данных массива в базу данных. OneToMany и ManyToOne
Есть две сущности , User и Family , у юзера может быть много родственников, поэтому был реализован метод , на который направляется массив json c информацией о родственниках. Когда я пытаюсь сохранить , возникают различные ошибки. Пробовал разные способы. Я оставлю код , посмотрите пожалуйста , в чем может быть проблема ? Любой рабочий вариант подойдет:
Request json который направляю на ендпоинт:
[
{
"name":"luda",
"surname":"Petrova",
"phone":"2353636",
"bus":"black"
},
{
"name":"dima",
"surname":"Petrov",
"phone":"23536336",
"bus":"red"
},
{
"name":"ivan",
"surname":"Petrov",
"phone":"2353",
"bus":"blue"
}
]
RestController , много раз менял , оставлю этот вариант:
@RequestMapping(value = { "fam/{id}" },method = RequestMethod.POST)
public User addyfam (@PathVariable Long id, @RequestBody List<FamReq> fammreq){
User usr = userRepo.findById(id).get();
var arr = new ArrayList<Family>();
for(FamReq f : fammreq ) {
arr.add(new Family( f.getName(),f.getSurname(),f.getPhone(),f.getBus()));
}
usr.setFamily(arr);
userRepo.save(usr);
return usr;
}
Сущность User :
@Entity
@Table(name="usr")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="name")
private String name;
@Column(name="surname")
private String surname;
@OneToOne(
mappedBy = "user",
cascade = CascadeType.ALL,
orphanRemoval = true,
fetch = FetchType.LAZY
)
@JsonManagedReference
private Passport passport;
@OneToMany(
mappedBy = "user",
cascade = {CascadeType.ALL},
orphanRemoval = true
)
private List<Family> family = new ArrayList<>();
public void addFamily(Family fam) {
family.add(fam);
fam.setUser(this);
/**get/set and constr **/
}
Сущность Family :
@Entity
@Table(name="family")
public class Family {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="name")
private String name;
@Column(name="surname")
private String surname;
@Column(name="phone")
private String phone;
@Column(name="bus")
private String bus;
@ManyToOne(
fetch = FetchType.LAZY
)
@MapsId
@NotFound(action = NotFoundAction.IGNORE)
private User user;
/**get/set and constr **/
}
В данном примере выходит ошибка Error: attempted to assign id from null one-to-one property [com.dbtest.springboot.db_model.Family.user] , если внести изменения как указано в блоге https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/
То возвращается ошибка: ОШИБКА: значение NULL в столбце id отношения family нарушает ограничение NOT NULL . Это в том случае , когда собирается объект через foreach и устанавливается с помощью метода в User :
public void addFamily(Family fam) {
family.add(fam);
fam.setUser(this);