註解@ManytoMany 多對多關係 簡單使用方法
阿新 • • 發佈:2019-01-11
import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; @Entity public class User { private Long id; private Department department; private Set<Role> roles = new HashSet<Role>(); private String loginName; private String password; private String name; private String gender; private String phoneNumber; private String email; private String description; @Id @GeneratedValue public Long getId() { return id; } public void setId(Long id) { this.id = id; } @ManyToOne() public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } @ManyToMany(cascade=CascadeType.PERSIST,fetch=FetchType.LAZY) @JoinTable(name="user_role", joinColumns={@JoinColumn(name="user_id")}, inverseJoinColumns={@JoinColumn(name="role_id")}) public Set<Role> getRoles() { return roles; } public void setRoles(Set<Role> roles) { this.roles = roles; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
第一個類是Role 崗位類
第二個類是User 使用者類
每個使用者可以有多個崗位,每個崗位包含多個使用者
這樣的多對多關係。
個人程式設計的時候出現的問題就是,剛開始都只加了一個註解@ManytoMany 後來發現操作對User物件新增Role集合的時候,關聯表裡面的內容沒有改。才發現少了配置。
最簡單的配置首先需要配置,被依賴方 @ManytoMany(mappedBy="roles") ,我在這裡定義的是roles,意思是當對User物件設定roles的時候,關聯表裡面會操作。
@JoinTable(name="user_role", joinColumns={@JoinColumn(name="user_id")}, inverseJoinColumns={@JoinColumn(name="role_id")})
@JoinTable是用來設定關聯表的各項屬性的
首先 name 屬性是設定表的名字
joinColumns={} 這是一個列的集合,裡面填入關聯列的列名
當這些配置好過後,當對User物件設定roles集合的時候,關聯表裡面就會新增資料了