2014-03-30 83 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儿童和父母之间的关系。希望有所帮助。

相关问题