`
hoversong
  • 浏览: 3144 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

hibernate 注解 manytomany 级联删除问题

阅读更多
定义了两个类,Account 和 Department。是多对多关系,类定义如下;
@Entity
@Table(name = "ACCOUNTS")
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Account {
        private Long id;
private String loginName;
private List<Department> departments;
...

@Override
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STORE")
@SequenceGenerator(name = "SEQ_STORE", sequenceName = "ACCOUNTS_ID", allocationSize = 2)
@Column(length = 12)
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}
@ManyToMany(fetch = FetchType.LAZY)
@OrderBy("priority desc")
@JoinTable(name = "ACCOUNT_DEPARTMENT_ACCOUNT", joinColumns = { @JoinColumn(name = "account_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "department_id", nullable = false, updatable = false) })
@Cascade( { CascadeType.SAVE_UPDATE })
public List<Department> getDepartments() {
return departments;
}

public void setDepartments(List<Department> departments) {
this.departments = departments;
}
}

@Entity
@Table(name = "ACCOUNT_DEPARTMENTS")
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Department {
private Long id;

private List<Department> children;
private List<Account> accounts;

@Override
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STORE")
@SequenceGenerator(name = "SEQ_STORE", sequenceName = "ACCOUNT_DEPARTMENTS_ID", allocationSize = 2)
@Column(length = 12, name = "ID")
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

@OneToMany(fetch = FetchType.LAZY)
@OrderBy("priority desc")
@Cascade(CascadeType.ALL)
@JoinColumn(name = "parentId")
public List<Department> getChildren() {
return children;
}

public void setChildren(List<Department> children) {
this.children = children;
}
@ManyToMany(fetch = FetchType.LAZY)
@OrderBy("priority desc")
@JoinTable(name = "ACCOUNT_DEPARTMENT_ACCOUNT", joinColumns = { @JoinColumn(name = "department_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "account_id", nullable = false, updatable = false) })
@Cascade( { CascadeType.SAVE_UPDATE })
public List<Account> getAccounts() {
return accounts;
}

public void setAccounts(List<Account> accounts) {
this.accounts = accounts;
}
}
自动在数据库中生成三个表 ACCOUNTS,ACCOUNT_DEPARTMENTS,和中间表ACCOUNT_DEPARTMENT_ACCOUNT。
现在我删除部门表(ACCOUNT_DEPARTMENTS)的一个记录时,(假设id=3删除),它会把中间表ACCOUNT_DEPARTMENT_ACCOUNT中的 department_id = 3的记录删除。
还会把ACCOUNT_DEPARTMENT_ACCOUNT中 department_id = 3 对应的人员表记录id,例如是account_id = 4,account_id = 5,把ACCOUNTS中的id为4,和5的记录也会删掉。
同时还会把 ACCOUNT_DEPARTMENTS 中id=3,和子部门 = 3 的记录也删掉。

我是想只删掉中间表中 department_id = 3,和 ACCOUNT_DEPARTMENTS 中id = 3的记录。
请问这样该怎么实现呢?
分享到:
评论

相关推荐

    hibernate3.2的级联关系_JavaProject

    级联关系在Hibernate中是指当一个实体发生某种操作(如保存、更新、删除)时,是否会影响到与之相关联的其他实体。通过配置级联关系,我们可以控制这些关联实体的行为。 1. **一对多(OneToMany)**:在数据库中,...

    Hibernate 注解说明文档

    本文档将深入探讨Hibernate注解的使用,帮助开发者更好地理解和利用这些注解来实现对象关系映射(ORM)。 一、Hibernate注解基础 Hibernate注解是一种元数据方式,用于在Java类和属性上声明数据库映射信息,从而...

    hibernate 级联查询

    3. **配置级联**:在Hibernate的映射文件(XML或注解)中,可以指定实体之间的关联是否启用级联,例如在`@ManyToOne`、`@OneToOne`、`@OneToMany`和`@ManyToMany`等关联注解中设置`cascade`属性。 4. **级联查询...

    hibernate注解

    在本文中,我们将深入探讨Hibernate注解的几个核心方面:级联关系、增删改查操作、二级缓存、日志配置以及注解解析。 1. **级联关系**: Hibernate中的级联关系允许我们在一个实体的操作中自动处理与其关联的其他...

    hibernate注解详解

    `@Cascade`可以定义对象间操作的级联行为,如保存、删除、更新等。 9. **复合主键注解(@EmbeddedId and @Embeddable)** 当主键由多个字段组成时,可以使用`@EmbeddedId`和`@Embeddable`注解来定义复合主键。 10....

    Hibernate注解 关联关系映射注解.docx

    多对多的关联关系可以使用`@ManyToMany`注解,Hibernate会自动创建一个中间表来存储两个实体类之间的关联。如果需要自定义中间表的名称或字段,可以使用`@JoinTable`注解。在双向多对多关联中,依然需要`mappedBy`来...

    manytomany注解模式.rar

    1. "Hibernate Annotation多对多注解问题 - JavaEye问答.htm":这可能是一个论坛或问答网站上的讨论,详细解释了在使用Hibernate注解处理多对多关系时遇到的问题和解决方案。 2. "新建 文本文档.txt":可能包含了...

    Hibernate_范型_级联

    而级联(Cascading)则是Hibernate中处理关联对象的一种策略,它定义了当一个实体被保存、更新或删除时,与之关联的其他实体应该如何处理。 【描述】: Hibernate中的范型主要体现在SessionFactory、Session、...

    HIbernate-ManytoMany:HIbernate-ManytoMany 不同实体之间的关系

    `@ManyToMany`注解是Hibernate提供的用于建立两个实体之间多对多关联的工具。它可以在实体类的属性上使用,该属性通常是一个集合类型,如`List`、`Set`等。以下是一个简单的例子: ```java @Entity public class ...

    hibernate注解处理映射关系共14页.pdf.zip

    本资料“hibernate注解处理映射关系共14页.pdf.zip”显然是一个关于Hibernate注解使用的详细教程,涵盖了14页的内容。以下是基于该主题的详尽知识点解析: 1. **Hibernate概述**:Hibernate是Java平台上的一个开源...

    hibernate 关系注解

    多对多关系通常通过中间表实现,可以使用`@ManyToMany`注解。双向关系中,一方使用`mappedBy`属性引用另一方的集合属性。 在实际开发中,理解并正确应用这些关系注解是至关重要的,因为它们决定了对象与数据库之间...

    hibernate5_ManyToMany多对多单向维护

    在`User`实体中,我们使用`@ManyToMany`注解来声明多对多关联,并通过`@JoinTable`注解指定中间表`user_roles`,以及两个实体在中间表中的对应列。 2. 定义`Role`实体: ```java @Entity public class Role { ...

    HIbernate注解详解(二)

    在本篇关于“Hibernate注解详解(二)”的文章中,我们将深入探讨Hibernate框架中的一些核心注解,这些注解是Java开发者在进行对象关系映射(ORM)时不可或缺的工具。通过理解并熟练运用这些注解,可以极大地提高...

    hibernate 注解 英文版的

    ### Hibernate 注解详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它通过 ORM(对象关系映射)技术将 Java 应用程序中的对象模型与数据库的关系模型之间建立桥梁,实现对象数据与关系型数据库数据...

    Hibernate 两种方式映射many to many

    在Hibernate中,我们可以通过`@ManyToMany`注解来定义这种关系,并使用`@JoinTable`注解来指定中间表的信息。例如: ```java @Entity public class Student { @Id @GeneratedValue(strategy = GenerationType....

    Hibernate 注解(总结).docx

    本文将详细讲解Hibernate注解的使用,包括持久化类的声明、属性映射以及对象关联关系的配置。 一、什么是注解? 注解是一种元数据,它为编译器和JVM提供关于代码的附加信息。在Hibernate中,注解用于标记Java类和...

    hibernate常用注解

    #### 一、JPA与Hibernate注解基础 JPA(Java Persistence API)是一种标准规范,用于实现对象关系映射(ORM),允许开发人员使用注解或XML来描述实体对象与数据库表之间的映射关系。Hibernate是JPA的一种实现,它...

    hibernate4注解详尽参考

    4. 级联操作注解:@Cascade注解用于控制关联实体间的持久化操作,如级联保存(save-update)、级联删除(delete)等。 5. 高级映射注解:例如@Formula注解允许开发者插入数据库特定的SQL表达式,@SecondaryTable...

    详解Hibernate cascade级联属性的CascadeType的用法

    详解Hibernate cascade级联属性的CascadeType的用法 cascade(级联) ...cascade表示级联操作,在hibernate配置注解@OneToOne,@OneToMany,@ManyToMany,@ManyToOne中的属性。 例如: @ManyToOne(c

Global site tag (gtag.js) - Google Analytics