Как сохранить как родителя, так и ребенка в jpa

#spring-boot #spring-mvc #jpa

#пружинный ботинок #весна-mvc #jpa

Вопрос:

Я пытаюсь сделать запрос на регистрацию, для которого требуется User объект, включающий UserLogin объект, содержащий имя пользователя и пароль. Но когда я пытался сохранить User объект, он сказал userid (fk of UserLogin не может не быть нулевым).

Смотрите это изображение ошибки

И вот мой EDR

введите описание изображения здесь

Вот моя конфигурация для отображения пользователя класса 2 объектов

 class User {  @OneToOne(mappedBy = "user", cascade = CascadeType.ALL)  @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)  private UserLogin userLogin; }  class UserLogin {  @OneToOne(cascade = CascadeType.ALL)  @JoinColumn(name = "userid", referencedColumnName = "id")  private User user; }  

Мой код для их сохранения

 @Transactional public User register(User user) {  Setlt;UserRolegt; roleSet = new HashSetlt;gt;();  UserRole role = new UserRole();  // default role  role.setRole_name("ROLE_NHANVIEN");  role.setId(4L);  roleSet.add(role);  // encrypt pass  user.setRoles(roleSet);  log.info(user.getUserLogin().getUsername());  return userRepository.save(user); }  

Комментарии:

1. установлен ли справочник UserLogin.user? вызовите user.getUserLogin().setUser(пользователь) перед сохранением, если это не так. Сторона-владелец должна быть настроена на двунаправленные отношения для установки внешних ключей

2. Спасибо, это работает, я думал, что просто добавьте логин пользователя к пользователю и каскадно сделайте все это

3. Нет, JPA требует, чтобы вы управляли своей моделью сущностей, устанавливая обе стороны отношений, пытаясь заставить ее вести себя так, как вы ожидали бы от POJO.