mam poniżej 3 modeli:obiekt odwołuje niezapisaną przemijające wystąpienie - zachowaj przemijające instancji przed spłukiwanie: Wiosna danych WZP
Model 1: Rezerwacja
@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<>();
}
Model 2: Pokój Rezerwacja:
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<>();
}
model 3: Szczegóły gości:
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;
}
wzajemny stosunek tych trzech są:
Rezerwacja --One wielu na RESERVATION_ID -> Pokój Rezerwacja --One wielu na ROOM_RESERVATION_ID -> Szczegóły gości
otrzymuję celem rezerwacji i próbuje zaktualizować dane gościnnie pojawia się następujący błąd:
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
Zmieniłem cascadeType ALL jak sugeruje częste pytanie wciąż otrzymuję ten sam error.Please dawca uczynić go powielać tak jak wypróbowałem wszystkie rozwiązania wykonane na tego rodzaju pytanie już zadane
Proszę dać mi znać, jaki błąd robię. Dzięki
Kod zapisać Rezerwacja obiektu za zmieniającymi 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);
Proszę zaksięgować kod, który faktycznie robi zapisywanie - jakiego typu klasy próbujesz zapisać? – PaulNUK
@PaulNUK Dodałem blok kodu, którego używam do zapisania. Proszę spojrzeć. –
@PaulNUK Witam, jakieś aktualizacje ..? –