Я новичок в Spring-boot
, но немного знаком с JPA
. У меня есть проект, над которым я работаю, я уже настроил database
и сгенерировал мои модели из моей базы данных. Я работал как минимум над 4 JPA
проектами, и я впервые столкнулся с @EmbeddedId
.
У меня есть таблица Passenger
, которая выглядит как
public class Passenger implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected PassengerPK passengerPK;
@Size(max = 13)
@JoinColumn(name = "user_uuid", referencedColumnName = "uuid", insertable = false, updatable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private User user;
@Column(name = "date_created")
@Temporal(TemporalType.TIMESTAMP)
private Date dateCreated;
....
}
И мой сгенерированный passengerPK
@Embeddable
public class PassengerPK implements Serializable {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 100)
@Column(name = "uuid")
private String uuid;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 100)
@Column(name = "user_uuid")
private String userUuid;
public PassengerPK() {
}
...
}
Без @EmbeddedId
в JPA
я бы добавил новую запись в таблицу Passenger
сначала initializing
и сохранил бы пользователя
final User user = new User();
user.setUuid(UUID.randomUUID().toString());
user.setFname(passengerDto.getFirstName());
user.setLname(passengerDto.getLastName());
user.setPassword(passwordEncoder.encode(passengerDto.getPassword()));
user.setEmail(passengerDto.getEmail());
user.setPhone(passengerDto.getPhone());
user.setDateCreated(new Date());
User savedUser = userRepository.save(user);
Затем я передаю этого пользователя моему новому Passenger
, например
final Passenger passenger = new Passenger();
passenger.setUuid(UUID.randomUUID().toString());
passenger.setUser(savedUser);
passenger.setDateCreated(new Date());
Passenger savedPassenger = passengerRepository.save(passenger);
But this fails, I get an error that `user_uuid` is null
. Затем я изменяю что-то вроде
final Passenger passenger = new Passenger();
PassengerPK passengerPK = new PassengerPK();
passengerPK.setUuid(UUID.randomUUID().toString());
passengerPK.setUserUuid(savedUser.getUuid());
passenger.setPassengerPK(passengerPK);
passenger.setDateCreated(new Date());
Passenger savedPassenger = passengerRepository.save(passenger);
, и я получаю сообщение об ошибке java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (
mydatabase * 1031. * passenger , CONSTRAINT
fk_passenger_user1 FOREIGN KEY (
user_uuid ) REFERENCES
user (
uuid ) ON DELETE NO ACTION ON UPDATE NO ACTION)
Может кто-нибудь помочь мне понять это?