java - hibernate - 从多对多中删除

标签 java hibernate many-to-many

我有以下两个 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;
    }
}

@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;
    }
}

从多对多关系中删除的常见做法是什么?以下代码可以完美运行,但会产生大量开销。首先,有一些疑问:

  1. 1 个获取项目的查询,由 member.getProjects() 触发
  2. N 个查询来获取每个项目的所有成员,由 project.getMembers() 触发

其次,获取项目(查询 1)和成员(查询 2)的完整数据集,而不仅仅是标识符。

final Member member = ...;
for (final Project project : member.getProjects()) {
    project.getMembers().remove(member);
}
db.delete(member);

是否可以在不被迫编写临时查询的情况下更有效地完成此操作?

最佳答案

看这里:

How to remove entity with ManyToMany relationship in JPA (and corresponding join table rows)?

此外,您还可以选择使用 jpql 语句来删除数据:

http://docs.oracle.com/html/E24396_01/ejb3_overview_query.html#ejb3_overview_query_delete

但我认为第一个链接就是您正在寻找的内容。

关于java - hibernate - 从多对多中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25837499/

相关文章:

Java:绘制多个形状的轮廓

Java并发从多个线程写入单个文本文件?

java - 使用 Java 运行 .sh

java - 如何从客户端简单地将对象添加到 hibernate 中的集合

nhibernate多对多包未插入关联表

java - 希望使用简单的规则 api 构建 java 动态规则引擎

java - 具有继承性的 JPA 映射 View 和表

oracle - Oracle 数据库 11g 的 Hibernate 方言?

java - 控制台应用程序中出现延迟加载错误

java - 多对多关联无法与级联属性一起正常工作