Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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关系的实例_Java_Hibernate_Hibernate Onetomany - Fatal编程技术网

Java 无法在hibernate中删除OneToMany关系的实例

Java 无法在hibernate中删除OneToMany关系的实例,java,hibernate,hibernate-onetomany,Java,Hibernate,Hibernate Onetomany,我有一个OneToMany关系,我可以插入记录,但不能删除它们,当我尝试删除它时,会遇到“外键约束失败”错误。我使用了如下级联删除孤儿,但还不起作用 父类的成员具有以下getter import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.OneToMany; @Entity @Dynami

我有一个OneToMany关系,我可以插入记录,但不能删除它们,当我尝试删除它时,会遇到“外键约束失败”错误。我使用了如下级联删除孤儿,但还不起作用

父类的成员具有以下getter

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;

@Entity
@DynamicUpdate
public class User extends Employee{
    private string userli;
    privae List<Message> messagelist();

    .....

    @OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
    public List<Message> getMessagelist() {
        return messagelist;
    }
我也使用了下面的注释,但不起作用

     @Cascade(org.hibernate.annotations.CascadeType.DELETE)
我的hibernate依赖项如下

 <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.2.1.Final</version>
    <type>jar</type>
</dependency>
尝试更改cascade=cascadeType.ALL
检查
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
公共列表getMessagelist(){
返回消息列表;
这可能有效,但不确定

处理一对一关系有几种方法。最常见的方法之一是:

@OneToMany(mappedBy="receiver", CascadeType.REMOVE)
public List<Message> getMessagelist() {
        return messagelist;
}

....

@ManyToOne
public User getReciever() {
        return reciever;
}
@OneToMany(mappedBy=“receiver”,CascadeType.REMOVE)
公共列表getMessagelist(){
返回消息列表;
}
....
@许多酮
公共用户getReceiver(){
回传接收器;
}
请注意,fetch=FetchType.LAZY是默认值,您实际上不需要指定它

此外,由于db约束已经创建,您可能需要重新创建表。在这种情况下,不要100%信任hbm2ddl.auto=update。我建议删除相关表(Message、Reciver和Receiver\u Message或Message\u Receiver)。接下来,您可以使用hbm2ddl.auto=update

我希望有帮助


干杯

尝试添加以下注释。这对我很有效

@OneToMany(mappedBy="receiver", cascade=CascadeType.ALL, fetch=FetchType.LAZY)  
@Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
 public Set<Message> getMessagelist() {
    return messagelist;
}

使用您的代码后,它不会引发异常,但仍然无法删除记录。它是否从Receiver\u Message或Message\u Receiver表中删除?
Try to change the cascade = cascadeType.ALL 

and check

    @OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
    public List<Message> getMessagelist() {
            return messagelist;

It might work but not sure 
@OneToMany(mappedBy="receiver", CascadeType.REMOVE)
public List<Message> getMessagelist() {
        return messagelist;
}

....

@ManyToOne
public User getReciever() {
        return reciever;
}
@OneToMany(mappedBy="receiver", cascade=CascadeType.ALL, fetch=FetchType.LAZY)  
@Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
 public Set<Message> getMessagelist() {
    return messagelist;
}
@Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)