需求:一个员工输入多个部门,一个部门有多个员工,也即员工和部门是多对多的关系。想要生成一张中间表,在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就可以直接保存进中间表了。