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();
}