Hibernate双向多个删除问题

Hibernate双向多个删除问题,hibernate,many-to-many,hibernate-mapping,Hibernate,Many To Many,Hibernate Mapping,在我的项目中,我有用户和公司的实体: @Entity @Table(name = "users") public class UserDetails { @Id @GeneratedValue @Column(name = "user_id") private int id; @Column(name = "first_name") @NotEmpty @Size(min = 2, max = 20) private Strin

在我的项目中,我有用户和公司的实体:

@Entity
@Table(name = "users")
public class UserDetails {

    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private int id;

    @Column(name = "first_name")
    @NotEmpty
    @Size(min = 2, max = 20)
    private String firstName;

    @ManyToMany(cascade = CascadeType.REFRESH)
    @JoinTable(name = "users_companies",
            joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "company_id"))
    private Set<CompanyDetails> userCompanies = new HashSet();

    //getters and setters of course...
}

@Entity
@Table(name = "companies")
public class CompanyDetails {
    @Id
    @GeneratedValue
    @Column(name = "company_id")
    private int id;

    @Column(name = "name")
    @NotEmpty
    @Size(min = 1, max = 255)
    private String name;

    @ManyToMany(mappedBy = "userCompanies")
    private Set<UserDetails> companyUsers = new HashSet();

}

你能帮我解决这个问题吗?谢谢。

您必须有一个
CascadeType。删除实体
CompanyDetails
属性
companyUsers
注释中的

[评论后编辑]


对不起,我在回答中遗漏了一件事,那就是这是一个多对多的问题。所以级联删除将不起作用。然后问题是负责关系的是UserDetails类。这就是为什么它以一种方式工作,而不是以另一种方式工作。在删除公司之前,您可能必须从公司用户集的每个UserDetails中的UserCompanys集合中删除此公司。

我知道这是旧的,但它可能会帮助某人。。。我试图做完全相同的事情——从每个主表中删除,首先删除连接表中的引用记录,然后从主表中删除记录。benzonico的帖子是有效的,但有一种更简单的方法可以做到这一点(无需自己从联接表中删除记录)。公司表的映射也需要更改为主表(不要使用mappedBy):

@实体
@表(name=“公司”)
公共类公司详情{
@身份证
@生成值
@列(name=“company\u id”)
私有int-id;
@列(name=“name”)
@空空如也
@尺寸(最小值=1,最大值=255)
私有字符串名称;
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinTable(name=“用户\公司”,
joinColumns={@JoinColumn(name=“company_id”)},
inverseJoinColumns=@JoinColumn(name=“user\u id”))
私有集companyUsers=新HashSet();
}

这应该能奏效。现在,无论何时删除公司,Hibernate都会先删除用户和公司中的记录,然后再删除公司本身。此处的更多信息:

它不仅从关系表中删除me用户,还从用户表中删除me用户:(很抱歉,我在回答中漏掉了一件事,那就是它是多对多的。因此级联删除不起作用。然后问题是负责关系的是
UserDetails
类。这就是为什么它在一种方式上有效,而在另一种方式上无效。在删除该公司之前,您可能必须从
userComp中删除该公司
公司用户的每个
用户详细信息
集合中的anies
集合。我不能再有任何解决方案了?我是说不那么复杂的解决方案。但无论如何,谢谢你的解决方案!:)
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`d_torianik/users_companies`, CONSTRAINT `FK447D806437A764EB` FOREIGN KEY (`company_id`) REFERENCES `companies` (`company_id`))
@Entity
@Table(name = "companies")
public class CompanyDetails {
    @Id
    @GeneratedValue
    @Column(name = "company_id")
    private int id;

    @Column(name = "name")
    @NotEmpty
    @Size(min = 1, max = 255)
    private String name;

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(name = "users_companies",
    joinColumns = {@JoinColumn(name = "company_id")},
    inverseJoinColumns = @JoinColumn(name = "user_id"))
    private Set<UserDetails> companyUsers = new HashSet();

}