Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 删除父级,当子级被删除时(单向OneToOne)_Hibernate_Jpa_Playframework_Playframework 1.x_One To One - Fatal编程技术网

Hibernate 删除父级,当子级被删除时(单向OneToOne)

Hibernate 删除父级,当子级被删除时(单向OneToOne),hibernate,jpa,playframework,playframework-1.x,one-to-one,Hibernate,Jpa,Playframework,Playframework 1.x,One To One,我有一个名为Photo的模型类和其他几个类,它们表示不同类型的照片源。Photo类必须保持其源类的不可知性,因此现在,我将关系表示为源的一侧的单向OneToOne: @Entity public class Photo extends Model { ... } @Entity public class InstagramPhoto extends PhotoSource { @Id public String id; } @Mapped

我有一个名为Photo的模型类和其他几个类,它们表示不同类型的照片源。Photo类必须保持其源类的不可知性,因此现在,我将关系表示为源的一侧的单向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实例,其关联的照片实例也会被删除。但是,相反的操作会引发异常。我无法删除照片实例。它给了我以下错误:

Referential integrity constraint violation: "FK9366567567B45F0BDBD6: PUBLIC.INSTAGRAMPHOTO FOREIGN KEY(PHOTO_ID) REFERENCES PUBLIC.PHOTOS(ID) (4)";
另外,虽然我不想把照片和一个光源联系起来,但我也试过了,用另一个@OneToOne。然后,代码不编译,表示无法创建与PhotoSource.photo的mappedBy关系


我能做什么?

您可以更改Photo类以反映与PhotoSource类的关联。然后将级联选项添加到照片中,这也将删除相关照片

比如:

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

请记住,这需要反映您的数据库模型。如果您不想将照片与PhotoSource关联,您可能需要手动删除相关行。

您也可以尝试
cascade=CascadeType。所有的
它负责孩子和父母之间的
保存、删除、更新、逐出、锁定、复制、合并、持久化。希望能有所帮助。

我通过在
PhotoSource
中将
@MappedSuperclass
@Entity
交换,并将id定义移到那里,解决了这个问题