Tôi có Dưới 3 mô hình:đối tượng tham chiếu một thể hiện thoáng qua chưa được lưu - lưu dụ thoáng qua trước khi xả nước: Mùa xuân dữ liệu JPA
Mẫu 1: Đặt
@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<>();
}
Mô hình 2: Phòng Reservation:
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<>();
}
Mô hình 3: Chi tiết khách:
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;
}
Mối quan hệ giữa ba như:
Reservation --One để Nhiều người trên RESERVATION_ID -> Đặt Phòng --One để Nhiều người trên ROOM_RESERVATION_ID -> Khách Chi tiết
Tôi nhận được đối tượng đặt phòng và cố gắng để cập nhật thông tin của khách tôi nhận được lỗi sau:
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
tôi đã thay đổi cascadeType cho TẤT CẢ như đề xuất trong câu hỏi phổ biến vẫn nhận được error.Please cùng donot làm cho nó trùng lặp vì tôi đã thử tất cả các giải pháp được thực hiện cho loại câu hỏi này đã được hỏi
Hãy cho tôi biết tôi đang làm gì sai. Cảm ơn
Mã để tiết kiệm Reservation Object bằng cách thay đổi 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);
Vui lòng đăng mã thực sự đang thực hiện lưu - loại bạn đang cố gắng lưu loại lớp nào? – PaulNUK
@PaulNUK Tôi đã thêm khối mã mà tôi đang sử dụng để lưu.Xin vui lòng xem. –
@PaulNUK Xin chào, mọi cập nhật ..? –