2013-10-16 3 views
1

다른 개체에서 참조 된 개체를 삭제하려면 어떻게해야합니까? 예 :다른 개체에서 참조되는 개체를 삭제하는 방법은 무엇입니까?

Person person = new Person(); 
Payment payment = new Payment(); 
payment.setReceiverOfPayment(person); 

dao.delete(person); 

클래스 : 이제

class Person { 

} 

class Payment { 
    //optional 
    @OneToOne 
    private Person receiverOfPayment; 
} 

내가 대상자를 삭제하면, 나는 예외를 받고 있어요 :

org.hsqldb.HsqlException: integrity constraint violation: foreign key no action; 
FK_PAYMENT_RECEIVEROFPAYMENT_ID table: PAYMENT 

이 사실로 인해 물론입니다 일부 지불은 여전히 ​​사람에 대한 참조를 가질 수 있습니다.

사람을 삭제하고 참조를 수동으로 지우기 전에 DB에서 모든 지불을 반복해야합니까? 아니면 자동으로 처리 할 수있는 계단식 (또는 유사한) 옵션이 있습니까?

+0

양방향 관계가 없으므로 JPA의 계단식을 사용할 수 없습니다. –

+0

JPA 캐스 캐 이드에서 이익을 얻으려면 위의 모델에서 무엇을 변경해야합니까? – membersound

+1

List 에'@ ManyToMany'가 적용될 수 있지만, 계단식 배열은 데이터베이스가 아닌 응용 프로그램 코드에 의해 생성됩니다. 각 지불에 대한 업데이트 요청 (FK가 null 일 수있는 경우)을 받게됩니다. –

답변

1

Person 개체에 지불 필드를 추가하십시오. 캐스케이드를 사용하려면 양방향 관계가 필요합니다. 이 같은

뭔가 :

@Entity 
public class Payment { 
    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name="myColumn") 
    private Person receiverOfPayment; 
} 

@Entity 
public class Person { 
    @OneToOne(mappedBy="receiverOfPayment") 
    private Payment payment; 
} 

당신이 원하는에 따라는 ManyToOne 더 관련이있을 수 있습니다. Hibernate Documentation에 대한 자세한 정보.

관련 문제