2014-03-30 3 views
0

저는 Photo라는 모델 클래스와 여러 유형의 사진 소스를 나타내는 다른 클래스가 있습니다. 내가 InstagramPhoto 인스턴스를 삭제하면자식이 삭제되면 상위 삭제 (단방향 OneToOne)

@Entity 
public class Photo extends Model { 
    ... 
} 

@Entity public class InstagramPhoto extends PhotoSource {  
    @Id  
    public String id; 
} 

@MappedSuperclass 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 
public abstract class PhotoSource extends GenericModel { 
    @OneToOne(cascade=CascadeType.REMOVE) 
    public Photo photo; 
} 

은, 관련 사진 인스턴스도 가져옵니다 사진 클래스는 내가 단방향 OneToOne의 하나로서 관계를 소스의 측면을 표현했다, 지금은 따라서 소스 클래스의 불가지론 남아 있어야 삭제됨 그러나 반대의 작업에서는 예외가 발생합니다. 사진 인스턴스를 삭제할 수 없습니다. 그것은 나에게 다음과 같은 오류를 준다 :

Referential integrity constraint violation: "FK9366567567B45F0BDBD6: PUBLIC.INSTAGRAMPHOTO FOREIGN KEY(PHOTO_ID) REFERENCES PUBLIC.PHOTOS(ID) (4)"; 

추신. PhotoSource에 사진을 연결하지 않기를 원하지만 다른 @OneToOne을 사용하여 사진을 시도해 보았습니다. 그런 다음 코드가 컴파일되지 않고 PhotoSource.photo의 mappedBy 관계를 만들 수 없다고 말합니다.

어떻게해야합니까?

답변

0

나는 PhotoSource@Entity으로 @MappedSuperclass 교환, 거기

을 ID 정의를 이동하여 그것을 해결
1

PhotoSource 클래스와의 연결을 반영하도록 Photo 클래스를 변경할 수 있습니다. 그런 다음 사진에 계단식 옵션을 추가하면 관련 사진도 삭제됩니다. 같은

뭔가 :이 데이터베이스 모델을 반영 할 필요가 있다고

@Entity 
public class Photo extends Model { 
    @OneToOne(cascade=CascadeType.REMOVE) 
    public PhotoSource photoSource; 
} 

염두에 보관하십시오. 사진을 PhotoSource와 연관시키지 않으려면 관련 행을 수동으로 삭제해야합니다.

-1

시도해 볼 수도 있습니다 cascade = CascadeType.ALL 어린이와 부모의 관계에서 save, delete, update, evict, lock, replicate, merge, persist을 돌 봅니다. 도움이되는 희망.