1. 程式人生 > >【hibernate】hibernate、jpa的@ManyToMany

【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就可以直接儲存進中間表了。