#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.