TicketLine을 제거하려고하면 "삭제 된 객체가 계단식으로 다시 저장됩니다."문제가 발생합니다. Ticket 클래스에 속한 컬렉션의 개체는 Reservation 클래스와 OneToOne 연관을가집니다.org.hibernate.ObjectDeletedException : 컬렉션 객체가 일대일 관계를 가질 때 삭제 된 객체가 다시 저장됩니다.
class Reservation
...
@OneToOne()
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
@JoinColumn(name = "resource_id")
public TicketLine getTicketLine() {
return ticketLine;
}
을 티켓에 TicketLine 객체와 예약 객체에 추가 :
티켓은 다음과 같이
class Tickets
...
@OneToMany(targetEntity = TicketLine.class, fetch = FetchType.EAGER)
@Fetch(org.hibernate.annotations.FetchMode.SUBSELECT)
@Cascade({org.hibernate.annotations.CascadeType.ALL,
org.hibernate.annotations.CascadeType.LOCK,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN,})
public List<TicketLine> getLines() {
return ticketlines;
}
....
클래스 예약 TicketLines에 OneToOne 관계를 정의하는 다음 게터와 TicketLines의 컬렉션을 정의 TicketLine 객체와 함께
ticket.getLines().add(line);
session.save(ticket);
Reservation res = new Reservation();
res.setTicketLine(m_ticketline);
....
session.save(res);
예상대로 작동합니다. 예약 ID가 resource_id 필드 인 예약 레코드가 생성됩니다.
나는 다음과 같은 오류가 관련 예약 개체가 컬렉션에서 선을 제거하면 : 라인과 관련된 예약이있을 때
이Save ticket failed: org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [org.myapp.hibernate.TicketLine#ff8081814a45ebb5014a45ebe4540003]
에만이 오류가납니다. 흥미롭게도 새 세션에서 두 번째 시도가 예외를 throw하지 않지만 예약이 삭제되지 않습니다!
TicketLines 컬렉션에서 줄을 제거하는 것은 여러 위치에서 발생할 수 있습니다. 즉, 수동으로 예약을 제거하는 것은 실제로 옵션이 아닙니다. 이것이 Hibernate에 의해 관리 될 수 있기를 바란다. 그리고 나는 그냥 계단식 옵션에 문제가있다.
도와주세요.
컬렉션에서 줄을 제거하는 코드로 게시물을 업데이트 할 수 있습니까? 또한 라인 오브젝트를 삭제하는 코드가 있습니까? –
내 대답을 참조하십시오. 고맙습니다. – arcasys