Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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 一对多批级联删除_Java_Hibernate_Jpa - Fatal编程技术网

Java 一对多批级联删除

Java 一对多批级联删除,java,hibernate,jpa,Java,Hibernate,Jpa,对于这两个实体,我有两个实体表和一个关系表。关系定义如下: 实体1: 如果其中一个entity1被删除,我希望它的对应关系条目也被删除,并且与Entity2类似 我在这里遗漏了什么?此映射存在哪些问题/错误 我看到一些映射需要更改。您应该删除@OneToMany映射上的@JoinColumn注释。您已经在多对多一侧指定了@JoinColumn,因此不需要在一对多一侧指定它。通常,您将@JoinColumn放在关系的拥有方。在一对多/多对一双向关系中,将@JoinColumn放置在用@manyto

对于这两个实体,我有两个实体表和一个关系表。关系定义如下:

实体1:

如果其中一个entity1被删除,我希望它的对应关系条目也被删除,并且与Entity2类似


我在这里遗漏了什么?

此映射存在哪些问题/错误

我看到一些映射需要更改。您应该删除@OneToMany映射上的@JoinColumn注释。您已经在多对多一侧指定了@JoinColumn,因此不需要在一对多一侧指定它。通常,您将@JoinColumn放在关系的拥有方。在一对多/多对一双向关系中,将@JoinColumn放置在用@manytone映射的字段上

此外,要指定双向关系的反向侧,@OneToMany注释应该具有mappedBy属性

应用我的建议,将导致ff。代码:

@Entity
public class Entity1 {
    ...
    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE}, mappedBy="obj1")
    private Set<Entity1Entity2Relation> relations;
    ...
}

@Entity
public class Entity2 {
    ...
    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE}, mappedBy="obj2")
    private Set<Entity1Entity2Relation> relations;
    ...
}

@Entity
public class Entity1Entity2Relation {
    ...
    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
    @JoinColumn(name = "propertyId", updatable = false, insertable = false)
    private Entity1 obj1;

    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
    @JoinColumn(name = "structureId", updatable = false, insertable = false)
    private Entity2 obj2;
    ...
}

它不起作用。Entity1Entity2Relation条目不会消失。请显示有关如何执行删除的代码,其中显示了所有涉及的实体。也许,一些DAO代码。
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
@JoinColumn(name = "id", updatable = false, insertable = false)
private Set<Entity1Entity2Relation> relations;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
@JoinColumn(name = "propertyId", updatable = false, insertable = false)
private Entity1 obj1;

@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
@JoinColumn(name = "structureId", updatable = false, insertable = false)
private Entity2 obj2;
@Entity
public class Entity1 {
    ...
    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE}, mappedBy="obj1")
    private Set<Entity1Entity2Relation> relations;
    ...
}

@Entity
public class Entity2 {
    ...
    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE}, mappedBy="obj2")
    private Set<Entity1Entity2Relation> relations;
    ...
}

@Entity
public class Entity1Entity2Relation {
    ...
    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
    @JoinColumn(name = "propertyId", updatable = false, insertable = false)
    private Entity1 obj1;

    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
    @JoinColumn(name = "structureId", updatable = false, insertable = false)
    private Entity2 obj2;
    ...
}