Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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
Java Hibernate单向OneToMany delete违反约束(可选=父端为false?)_Java_Hibernate_Jpa 2.0_Hibernate Mapping - Fatal编程技术网

Java Hibernate单向OneToMany delete违反约束(可选=父端为false?)

Java Hibernate单向OneToMany delete违反约束(可选=父端为false?),java,hibernate,jpa-2.0,hibernate-mapping,Java,Hibernate,Jpa 2.0,Hibernate Mapping,我使用Hibernate 3.6,我有如下内容: @Entity public class Parent { @OnyToMany( fetch = FetchType.LAZY, cascade = { ascadeType.ALL } ) @Cascade( { org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE )

我使用Hibernate 3.6,我有如下内容:

@Entity 
public class Parent { 
    @OnyToMany( fetch = FetchType.LAZY, cascade = { ascadeType.ALL } )   
    @Cascade( { org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE )   
    @JoinColumn( name="Parent_ID" )
    public List<Child> getChildren() { return children; }   
public void setChildren( List<Child> children ) { this.children = children; }
private transient List<TitleMetadataCategory> children;
...
 }

@Entity
public class Child {
....
}
在子端,Hibernate尝试用PARENT_ID=NULL更新子级,但由于DB约束而失败

有什么办法解决它吗?

你试过了吗

@JoinColumn(name = "Parent_ID", nullable = false)
?


另外,请注意,附加的实体是自动持久的。使用当前配置,您不需要调用
saveOrUpdate()

,Hibernate不知道从
子对象
集合中删除子对象时必须将其删除(称为孤立删除)。您需要在父级中使用
@OneToMany(orphaneremovation=true)
org.hibernate.annotations.CascadeType.DELETE
仅指定在删除整个父项时也应删除子项。

JB Nizet的答案有效,但有一个更正。因为我还有Child.getParentId()方法(不是getParent()),所以它的列注释除了Parent.getChildren()中的
nullable=false,insertable=false,updateble=false
参数之外,还应该有
nullable=false,updateable=false
关联。

单向hibernate不允许将关联映射到没有连接的实体。它已通过数据库中的Child.Parent\u ID列作为映射进行连接。我已尝试并获取了org.hibernate.MappingException:实体Parent\u ID异常映射中的重复列。这表示您已映射子实体中的parentId列桌子您不应该这样做,因为它已经映射为父表中的联接列。如果孩子知道自己的父母,那么就将其设置为双向关联。如果它不知道,那么它不应该映射parent_id列。你确实也需要删除孤立项。是的,我有几个带有孤立项删除的双方向映射,它可以工作。然而,父母有大约15种类型的孩子,其中一些孩子有自己的孩子。我很害怕为每一个定义双向映射,因为我已经有了一些级联确认。我已经尝试过了,但它不起作用,因为hibernate首先调度更新操作,然后才检查它是否是孤立的,并调度删除操作。结果,队列中有删除操作,但更新之前会引发异常。然后与JB Nizet建议的
@JoinColumn(name=“Parent\u ID”,nullable=false)
一起尝试
@JoinColumn(name = "Parent_ID", nullable = false)