J'ai moins de 3 modèles:fait référence à une instance transitoire non enregistrées - sauvegarder l'instance transitoire avant le rinçage: Spring données JPA
Modèle 1: Réservation
@Entity
public class Reservation {
public static final long NOT_FOUND = -1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
@OneToMany(mappedBy = "reservation", cascade = CascadeType.ALL, orphanRemoval = true)
public List<RoomReservation> roomReservations = new ArrayList<>();
}
Modèle 2: Chambre Réservation:
public class RoomReservation extends{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "RESERVATION_ID")
public Reservation reservation;
@OneToMany(mappedBy = "roomReservation", cascade = CascadeType.ALL, orphanRemoval = true)
public List<GuestDetails> guestDetails = new ArrayList<>();
}
Modèle 3: Détails des clients:
public class GuestDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
public Long guestId;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ROOM_RESERVATION_ID")
public RoomReservation roomReservation;
public Boolean isPrimary;
@Transient
public Guest guest;
}
Les relations entre ces trois sont comme:
Réservation --Une Many sur RESERVATION_ID -> Chambre Réservation --Une Many sur ROOM_RESERVATION_ID -> Invité Détails
Je reçois le objet de réservation et d'essayer de mettre à jour les détails d'invité i l'erreur suivante:
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.model.GuestDetails.roomReservation -> com.model.RoomReservation
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1760)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:82)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517)
... 73 common frames omitted
J'ai changé CascadeTypes à tous comme suggéré en question commune obtenir toujours le même error.Please donot faire en double comme j'ai essayé toute la solution réalisée à ce genre de question déjà posée
S'il vous plaît laissez-moi savoir quelle erreur je fais. Merci
Code pour sauvegarder l'objet de réservation en changeant GuestDetails:
Reservation existingReservation = reservationRepository.findOne(reservationId);
Reservation reservation = reservationParser.createFromJson(reservationNode);
existingReservation.roomReservations.forEach(roomReservation -> {
RoomReservation updatedRoomReservation = reservation.roomReservations.stream().filter(newRoomReservation -> Objects.equals(roomReservation.id, newRoomReservation.savedReservationId)).findFirst().orElse(null);
if(updatedRoomReservation != null){
roomReservation.guestDetails = updatedRoomReservation.guestDetails;
}
});
reservationRepository.save(existingReservation);
Veuillez écrire le code qui enregistre réellement le type de classe que vous essayez d'enregistrer. – PaulNUK
@PaulNUK J'ai ajouté un bloc de code que j'utilise pour sauvegarder. Veuillez jeter un oeil. –
@PaulNUK Salut, des mises à jour ..? –