#java #sql-server #spring-boot #spring-data-jpa
Вопрос:
У меня есть одна единственная связь между сущностью пользователя и сущностью адреса, внешний ключ связи находится в сущности адреса.
Когда я хочу сохранить объект пользователя с соответствующим адресом в базе данных «с помощью метода сохранения из CrudRepository», он правильно добавил сущности, но без сопоставления вставленного идентификатора пользователя с полем внешнего ключа в сущности адреса.
Итак, как заставить метод сохранения из UserRepository сопоставить вставленный идентификатор пользователя с внешним ключом в адресной сущности ? ^Обратите внимание, что идентификаторы всех сущностей генерируются из БД (автоматическое увеличение)
Сущность пользователя
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
// another columns//
@OneToOne(mappedBy = "user",
cascade = CascadeType.PERSIST,
orphanRemoval = true,
fetch = FetchType.LAZY)
private Addresses addressUser;
}
Адрес Организации
public class Addresses {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
// another columns//
@JsonIgnore
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "user_id")
private User user;
}
Запрос на
@Getter
@Setter
public class RequestDto {
@NonNull
private String fullName;
// another columns//
@NonNull
private Addresses address;
public User mapToEntity(Users user){
user.setFullName(this.fullName);
// another columns//
user.setAddressUser(this.address);
}
}
Service method
@Override
@Transactional
public User save(RequestDto requestDto) {
Users user = new Users();
requestDto.mapToEntity(user);
user = userRepository.save(user);
return user;
}
Хранилище
@Repository
public interface UserRepository extends JpaRepository<User, int> {}