多对多manytomany

----------------------多对多manytomany
要点:
多对多必须有mappedBy,让一个端维护关系
多对多会创建一张关系表,维护关系就是维护第三张表。
所以增加关系,则在集合中添加实体。删除关系,则从集合中删除实体。

mappedBy使一方丧失关系维护

@Entity
public class User {

    @Id
    @GeneratedValue
    private long id;

    @Column(name="name")
    private String name;

    @ManyToMany(cascade=CascadeType.PERSIST,mappedBy="users")
    private Set<Role> roles = new HashSet<Role>();
}

@Entity
public class Role {
    @Id
    @GeneratedValue
    private long id;
    @Column
    private String name;
    @ManyToMany
    private Set<User> users = new HashSet<User>();
    public String getName() {
        return name;
} 

删除用户139的ADMIN权限
        User u = session.get(User.class,139L);
        Set<Role> roles = u.getRoles();
        Iterator<Role> ites = roles.iterator();
        while(ites.hasNext()) {
            Role r = ites.next();
            if(r.getName().equals("ADMIN")){
                r.getUsers().remove(u);//执行成功,删除关系,而不删除用户
                //u.getRoles().remove(r);//执行失败,关系它不维护
            }
        }
时间: 2024-08-05 11:12:17

多对多manytomany的相关文章

JPA多对多@manytomany注解配置实例

维护端注解 @ManyToMany (cascade = CascadeType.REFRESH) @JoinTable (//关联表 name = "student_teacher" , //关联表名 inverseJoinColumns = @JoinColumn (name = "teacher_id" ),//被维护端外键 joinColumns = @JoinColumn (name = "student_id" ))//维护端外键 被

@ManyToMany 两个表多对多关联

两个表属于多对多关系 如 Teacher <=> Student 表teacher 主键 id 表student 主键id 中间关联表 teacher_student 两个字段 t_id 和 s_id @Entity Student 设置多对多 @ManyToMany(cascade = CascadeType.PERSIST, fetch=FetchType.LAZY) @JoinTable(name="teacher_student",joinColumns={@Joi

Hibernate双向多对多关联

一.配置双向多对多关联 以Project类(项目)和Emp类(员工)为例: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 private Integer pid; //名称 private String pname; //定义集合类型的Emp属性 private Set<Emp> emps=new HashSet<Emp>(); public Integer getPid() { return pid; } pub

Hibernate映射多对多双向关联关系(小案例)

多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 private Integer pid; //名称 private String pname; //定义集合类型的Emp属性 private Set<Emp> emps=new HashSet<Emp>(); public Integer getPid() { return pid; }

Django--models多对多

多对多--ManyToMany 应用场景 在某表中创建一行数据时,有一个可以多选的下拉框(一对一是单选框)例如:创建用户信息,需要为用户指定多个爱好 创建表 两种方法,一个是利用Django自动为多对多创建关联的第三张表,另一种是自己手动创建关系表. NO.1 根据Django中的代码,自动为多对多表创建一个第三张表对应关系 1 2 3 4 5 6 7 8 class Host(models.Model):     hostname = models.CharField(max_length=3

008多对一 关联映射 --- many-to-one

多对一 --- many-to-one 一对多 --- one-to-many 一对一 --- one-to-one 多对多 --- many-to-many 场景:用户和组:从用户角度来,多个用户属于一个组(多对一 关联) 使用hibernate开发的思路:先建立对象模型(领域模型),把实体抽取出来. 目前两个实体:用户和组两个实体,多个用户属于一个组,那么一个用户都会对应于一个组,所以用户实体中应该有一个持有组的引用. 关联映射的本质: 将关联关系映射到数据库,所谓的关联关系是对象模型在内存

SQLAlchemy 增删改查 一对多 多对多

安装介绍 创建 增删改查相关操作 高级版查询操作 高级版更新操作 扩展内容 安装介绍 - SQLAlchemy 是Python的一款Orm框架 创建 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String #创建基类,相当于Django中的 models.Model,被各个数

SpringDataJPA 多对多的查询

 主要的结构目录: 创建Role.java package cn.itcast.domain; import javax.persistence.*; import java.util.HashSet; import java.util.Set; @Entity @Table(name = "sys_role") public class Role { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nam

JPA的一对多,多对多用法

一.@OneToOne关系映射 JPA使用@OneToOne来标注一对一的关系. 实体 People :用户. 实体 Address:家庭住址. People 和 Address 是一对一的关系. 这里用两种方式描述JPA的一对一关系. 一种是通过外键的方式(一个实体通过外键关联到另一个实体的主键): 另外一种是通过一张关联表来保存两个实体一对一的关系. 1.通过外键的方式 people 表(id,name,sex,birthday,address_id) address 表(id,phone,