@OneToMany,@ManyToOne 中 @mappedby 和@joincolumn 用法和解釋
阿新 • • 發佈:2018-12-25
/** * 建立了一個實體類。 * * 如何持久化呢? * * 1、使用@Entity進行實體類的持久化操作,當JPA檢測到我們的實體類當中有 * * @Entity 註解的時候,會在資料庫中生成對應的表結構資訊。 * * * 如何指定主鍵以及主鍵的生成策略? * * 2、使用@Id指定主鍵. * * */ @Entity @Table(name="user") public class User { /** * 使用@Id指定主鍵. * * 使用程式碼@GeneratedValue(strategy=GenerationType.AUTO) * 指定主鍵的生成策略,mysql預設的是自增長。 * */ @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id;//主鍵. private String name;//姓名 private int age;//年齡 private String remakes;//備註 @ManyToOne @JoinColumn(name="role_id", nullable=false) private Role role1;//角色 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRemakes() { return remakes; } public void setRemakes(String remakes) { this.remakes = remakes; } }
@Entity @Table(name="role") public class Role { @Id private int id; private String name; private String desc; /* * 主表role 從表 user * mappedBy屬性應該指向從表中維護與主表關係的欄位。 * 定義類之間的雙向關係。如果類之間是單向關係,不需要提供定義, * 如果類和類之間形成雙向關係,我們就需要使用這個屬性進行定義, * 否則可能引起資料一致性的問題。該屬性的值是“多”方class裡的“一”方的變數名 * 對於Role類來說,mappedBy就應該指向User類中的role1屬性。 * @mappedBy註解的作用:在JPA中,在@OneToMany里加入mappedBy屬性可以避免生成一張中間表。 */ /** * 在‘一’的一方,將關係維護交給多的一方,就像一本書出版後,自己去定義自己的圖書型別, * 然後將自己歸納到相應圖書型別下。 * 當級聯操作時,比如某種圖書型別被封殺下架了,圖書館可以選擇銷燬,更新。。這種圖書型別下的圖書, * 也可以讓這些書就放在那不管他了(書沒了型別) */ @OneToMany(mappedBy="role1") private Set<User> users = new HashSet<User>(); public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public Set<User> getUsers() { return users; } public void setUsers(Set<User> users) { this.users = users; } }