[英]hibernate - delete from many-to-many
I have the following two POJOs: 我有以下两个POJO:
@Entity(name = "project")
@Table(name = "project")
public class Project {
@Column(name = "identifier")
@Id
@GeneratedValue
private Integer identifier;
@ManyToMany(cascade = CascadeType.ALL)
private Set<Member> members = new HashSet<Member>();
// --- constructors ---
public Project() {
}
// --- getters ---
public Integer getIdentifier() {
return identifier;
}
public Set<Member> getMembers() {
return members;
}
}
and 和
@Entity(name = "member")
@Table(name = "member")
public class Member {
@Column(name = "identifier")
@Id
@GeneratedValue
private Integer identifier;
@Column(name = "name", columnDefinition = "text")
private String name;
@ManyToMany(mappedBy = "members")
private Set<Project> projects = new HashSet<Project>();
// --- constructors ---
public Member() {
}
// --- getters ---
public Integer getIdentifier() {
return identifier;
}
public String getName() {
return name;
}
public Set<Project> getProjects() {
return projects;
}
}
What is common practise do delete from a many-to-many relation? 从多对多关系中删除的常见做法是什么? The following code works perfectly, but it generates a lot of overhead.
以下代码可以完美运行,但是会产生大量开销。 First, there are some queries:
首先,有一些查询:
member.getProjects()
member.getProjects()
触发 project.getMembers()
project.getMembers()
触发的每个项目的所有成员 Second, the complete data set of the project (query 1) and member (query 2) is fetched, and not only the identifier. 其次,获取项目(查询1)和成员(查询2)的完整数据集,而不仅仅是标识符。
final Member member = ...;
for (final Project project : member.getProjects()) {
project.getMembers().remove(member);
}
db.delete(member);
Is it possible to do this more efficient without being forced to write ad-hoc queries? 是否可以在不被迫编写临时查询的情况下提高效率?
Take a look here: 在这里看看:
How to remove entity with ManyToMany relationship in JPA (and corresponding join table rows)? 如何在JPA中删除具有ManyToMany关系的实体(以及相应的联接表行)?
Additionally you have the option to use jpql statements to delete data: 另外,您可以选择使用jpql语句删除数据:
http://docs.oracle.com/html/E24396_01/ejb3_overview_query.html#ejb3_overview_query_delete http://docs.oracle.com/html/E24396_01/ejb3_overview_query.html#ejb3_overview_query_delete
But I think the first link is what you are looking for. 但是我认为第一个链接就是您要寻找的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.