【hibernate】hibernate、jpa的@ManyToMany

     需求:一个员工输入多个部门,一个部门有多个员工,也即员工和部门是多对多的关系。想要生成一张中间表,在hibernate 中需要在2个实体中分别建立对应的关系。

     具体实体:

     

@Entity
@Getter
@Setter
@Table(name = "member")
public class Member {   //员工类

  
    @Id
    @GeneratedValue
    @Access(AccessType.PROPERTY)
    protected Integer id;

   
    @Column(columnDefinition = "char(32)")
    @Index(name = "uuid_index")
    protected String uuid;

    @ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
    private List<Department> Departments = new ArrayList();  }

@Entity
@Getter
@Setter
@Table(name = "department")
public class Department  {   //部门类
    
    @Id
    @GeneratedValue
    @Access(AccessType.PROPERTY)
    protected Integer id;

    
    @Column(columnDefinition = "char(32)")
    @Index(name = "uuid_index")
    protected String uuid;

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "Departments")
    private List<Member> Members = new ArrayList();
}

名词解释:

  @ManyToMany表示实体多对多的其中一端,可以用在很多的集合上,比如set/list/map/Collection上面。

   cascade表示级联关系,fetch表示加载机制,mappedBy表示声明关系的被维护方。在这俩个实体中,Department为被维护方,Member为维护方。当删除member的记录的时候。中间表的记录也将消失,反之,当删除department记录的时候,中间表 记录仍然存在。 具体见博客 对Jpa中Entity关系映射中mappedBy的理解

   这样,我们在保存实体Member的时候,直接setDepartments就可以直接保存进中间表了。

   

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值