2014-03-30 120 views
0

我有一個名爲Photo的模型類,和其他幾個類,代表不同類型的照片來源。照片類必須保持不可知其源類的,所以現在,我已經表示的關係是單向的OneToOne一個源的一面:刪除父母,當孩子被刪除(單向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; 
} 

如果我刪除InstagramPhoto情況下,其相關的照片實例也得到刪除。然而,相反的操作會引發異常。我無法刪除Photo實例。它給我以下錯誤:

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

P.S.雖然,我不想將照片與PhotoSource相關聯,但我也嘗試過使用另一個@OneToOne。然後,代碼不會編譯,並說無法創建與PhotoSource.photo的mappedBy關係。

我該怎麼辦?

回答

0

我在PhotoSource@Entity交換@MappedSuperclass和移動ID定義有

解決它
1

您可以更改Photo類以反映與PhotoSource類的關聯。然後你添加級聯選項照片,這將刪除相關的照片。

類似:

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

請記住,這需要反映你的數據庫模型。如果您不想將Photo與PhotoSource相關聯,則可能需要手動刪除相關行。

-1

您也可以試試cascade = CascadeType.ALL它處理save, delete, update, evict, lock, replicate, merge, persist兒童和父母之間的關係。希望有所幫助。

相關問題