国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hibernate一對多、多對一關聯

2019-11-14 20:48:17
字體:
來源:轉載
供稿:網友
Hibernate一對多、多對一關聯

一對多、多對一關聯:在多方加外鍵

示例:Group(一方)和User(多方),一個Group可以有多個User,每個User只能屬于一個Group

 

多對一單向關聯

在User(多方)中建Group(一方)對象,并添加@ManyToOne注解

1.建Group實體類和User實體類,添加Annotation注解,如下

@Entity@Table(name="_group")    //group在MySQL中是關鍵字,不能直接做表名public class Group {PRivate int id;private String name;@Id@GeneratedValuepublic 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;}}

 

@Entity@Table(name="_user")      //為了和表_group保持一致,也用一個別名public class User {private int id;private String name;private Group group;@Id@GeneratedValuepublic 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;}@ManyToOne       //多對一關聯//@JoinColumn(name="groupId")    //任意指定生成的外鍵名public Group getGroup() {return group;}public void setGroup(Group group) {this.group = group;}}

 

2.在hibernate.cfg.xml中添加mapping語句

<mapping class="com.hibernate.model.Group"/><mapping class="com.hibernate.model.User"/>

3.建Junit測試類

public class ORMappingTest {@Testpublic void test() {new SchemaExport(new Configuration().configure()).create(true, true);}}

程序至此結束,運行程序,在數據庫中生成表_group和表_user,并在控制臺輸出建表語句。

_user表中會自動生成屬性名為group_id的外鍵,可用@JoinColumn注解修改其屬性名

 

一對多單向關聯

在Group(一方)中建User(多方)對象,此對象采用Set集合形式

并添加@ManyToOne和@JoinColumn注解(必須添加)

1.建Group實體類和User實體類,添加Annotation注解,如下

@Entity@Table(name="_group")    //group在MySQL中是關鍵字,不能直接做表名public class Group {private int id;private String name;private Set<User> users = new HashSet<User>();   //新建Set集合形式的多方對象users@Id@GeneratedValuepublic 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;}@OneToMany        //一對多關聯@JoinColumn(name="groupId")       //若不添加該屬性,則會在數據庫中生成三張表。public Set<User> getUsers() {return users;}public void setUsers(Set<User> users) {this.users = users;}}

 

@Entity@Table(name="_user")      //為了和表_group保持一致,也用一個別名public class User {private int id;private String name;@Id@GeneratedValuepublic 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;}}

2.在hibernate.cfg.xml中添加mapping語句----同上

3.建Junit測試類----同上

程序至此結束,運行程序,會在數據庫中生成表_group和表_user,并在控制臺輸出建表語句

_user表中會生成指定屬性名的外鍵

 

一對多、多對一雙向關聯

在User中建Group對象,并添加@ManyToOne注解;在Group中建User對象,并添加@OneToMany注解

1.建Group實體類和User實體類,添加Annotation注解

User類同“多對一單向關聯”部分的User類

Group類,如下:

@Entity@Table(name="_group")    //group在MySQL中是關鍵字,不能直接做表名public class Group {private int id;private String name;private Set<User> users = new HashSet<User>();@Id@GeneratedValuepublic 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;}@OneToMany(mappedBy="group")   //這里的"group"是指User類中的private Group group;public Set<User> getUsers() {return users;}public void setUsers(Set<User> users) {this.users = users;}}

 

2.在hibernate.cfg.xml中添加mapping語句----同上

3.建Junit測試類----同上

程序至此結束,

運行程序,會在數據庫中生成表_group和表_user,并在控制臺輸出建表語句

_user表中會自動生成屬性名為group_id的外鍵,可用@JoinColumn注解修改其屬性名

 

@mappedBy含義

1.單向關系不需要設置該屬性,雙向關系必須設置,避免雙方都建立外鍵字段

2.只有OneToOne,OneToMany,ManyToMany上才有mappedBy屬性,ManyToOne不存在該屬性

3.mappedBy跟JoinColumn/JoinTable總是處于互斥的一方

 

以Group(一方)和User(多方)為例,

外鍵在User(多方),@JoinColumn/@JoinTable則只能設置在User(多方)。

則@mappedBy設置在Group(一方)。表明此關聯關系是由User(多方)維護的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安徽省| 石景山区| 普兰店市| 淮北市| 浦北县| 聂荣县| 白玉县| 喀什市| 宽甸| 稻城县| 深圳市| 秦皇岛市| 保定市| 瓦房店市| 临澧县| 彰化市| 壶关县| 时尚| 遂溪县| 绥宁县| 巨野县| 嵊州市| 岳普湖县| 德惠市| 樟树市| 乌鲁木齐县| 大化| 临澧县| 宣武区| 娄底市| 上饶市| 岳池县| 临清市| 牡丹江市| 青川县| 吉隆县| 深泽县| 黄梅县| 江达县| 东宁县| 惠东县|