Hibernate关联关系.docx
《Hibernate关联关系.docx》由会员分享,可在线阅读,更多相关《Hibernate关联关系.docx(23页珍藏版)》请在冰豆网上搜索。
Hibernate关联关系
Hibernate关联关系
目录
1、one-to-one单向外键关联2
1.1、xml映射方式2
1.2、Annotations映射2
2、one-to-one双向外键关联2
2.1、xml映射方式3
2.2、Annotations映射3
3、one-to-one单向主键关联(不重要)3
3.1、xml映射4
3.2、Annotations映射4
4、one-to-one双向主键关联(不重要)4
4.1、xml映射4
4.2、Annotations映射5
5、联合外键5
6、many-to-one单项关联6
6.1、xml映射6
6.2、Annotations映射6
7、one-to-many单向关联7
7.1、xml映射7
7.2、Annotations映射7
8、one-to-many/many-to-one双向关联8
8.1、xml映射8
8.2、Annotations映射8
9、many-to-many单向关联9
9.1、xml映射9
9.2、Annotations映射9
10、many-to-many双向关联10
10.1、xml映射10
10.2、Annotations映射11
11、继承11
11.1、每个类分层结构一张表(tableperclasshierarchy)[单表]11
表1Annotations11
表2xml12
11.2、每个子类一张表(tablepersubclass)12
表1Annotations13
表2xml14
11.3、每个具体类一张表(tableperconcreteclass)14
表1Annotations14
表2xml15
1、one-to-one单向外键关联
1.1、xml映射方式
Class
Xml
publicclassStudent{
privateintid;
privateStringname;
privateintage;
privateStringsex;
……get/set
}
publicclassStuIdCard{
privateintid;
privateStringnum;
privateStudentstudent;
……get/set
}
name="student"column="studentId"unique="true">
注意:
unique保证唯一性
1.2、Annotations映射
Classone
Classtwo
@Entity
publicclassWife{
privateintid;
privateStringname;
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
……get/set
}
publicclassHusband{
privateintid;
privateStringname;
privateWifewife;
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
@OneToOne
@JoinColumn(name="wifeId")
publicWifegetWife(){
returnwife;
}
……get/set
}
Wife-------husband@JoinColumn(name="wifeId"):
列别名
2、one-to-one双向外键关联
2.1、xml映射方式
Calss
Xml
publicclassStudent{
privateintid;
privateStringname;
privateintage;
privateStringsex;
privateStuIdCardstuIdCard;
……get/set
}
name="stuIdCard"
property-ref="student">
publicclassStuIdCard{
privateintid;
privateStringnum;
privateStudentstudent;
……get/set
}
name="student"column="studentId"unique="true">
2.2、Annotations映射
Classone
Classtwo
@Entity
publicclassWife{
privateintid;
privateStringname;
privateHusbandhusband;
@OneToOne(mappedBy="wife")
publicHusbandgetHusband(){
returnhusband;
}
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
……get/set
}
@Entity
publicclassHusband{
privateintid;
privateStringname;
privateWifewife;
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
@OneToOne
@JoinColumn(name="wifeId")
publicWifegetWife(){
returnwife;
}
……get/set
}
3、one-to-one单向主键关联(不重要)
3.1、xml映射
Class
Xml
publicclassStudent{
privateintid;
privateStringname;
privateintage;
privateStringsex;
……get/set
}
publicclassStuIdCard{
privateintid;
privateStringnum;
privateStudentstudent;
……get/set
}
student
3.2、Annotations映射
Classone
Classtwo
@Entity
publicclassWife{
privateintid;
privateStringname;
privateHusbandhusband;
@OneToOne(mappedBy="wife")
publicHusbandgetHusband(){
returnhusband;
}
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
……get/set
}
@Entity
publicclassHusband{
privateintid;
privateStringname;
privateWifewife;
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
@OneToOne
@PrimaryKeyJoinColumn
publicWifegetWife(){
returnwife;
}
……get/set
}
4、one-to-one双向主键关联(不重要)
4.1、xml映射
Class
Xml
publicclassStudent{
privateintid;
privateStringname;
privateintage;
privateStringsex;
privateStuIdCardstuIdCard;
……get/set
}
publicclassStuIdCard{
privateintid;
privateStringnum;
privateStudentstudent;
……get/set
}
student
4.2、Annotations映射
Classone
Classtwo
@Entity
publicclassWife{
privateintid;
privateStringname;
privateHusbandhusband;
@OneToOne
@PrimaryKeyJoinColumn
publicHusbandgetHusband(){
returnhusband;
}
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
……get/set
}
@Entity
publicclassHusband{
privateintid;
privateStringname;
privateWifewife;
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
@OneToOne
@PrimaryKeyJoinColumn
publicWifegetWife(){
returnwife;
}
……get/set
}
5、联合外键
Classone
Classtwo
@Entity
@IdClass(WifePK.class)
publicclassWife{
privateintid;
privateStringname;
privateintage;
@Id
publicintgetId(){
returnid;
}
@Id
publicStringgetName(){
returnname;
}
……get/set
}
@Entity
publicclassHusband{
privateintid;
privateStringname;
privateWifewife;
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
@OneToOne
@JoinColumns({
@JoinColumn(name="wifeId",referencedColumnName="id"),
@JoinColumn(name="wifeName",referencedColumnName="name")
})
publicWifegetWife(){
returnwife;
}
……get/set
}
需要第三个联合主键类WifePK,包括属性有id、name,实现Serializable,有get、set方法。
Wife的id和name联合做主键。
Husband类中的红色字体代码部分可以不用书写,默认生成,其作用为修改两个主键的name为wifeId和wifeName。
6、many-to-one单项关联
6.1、xml映射
Class
Xml
publicclassGroup{
privateintid;
privateStringname;
……get/set
}
publicclassUser{
privateintid;
privateStringname;
privateGroupgroup;
……get/set
}
一个组有多个用户,一个用户只能有一个组;多记少。
6.2、Annotations映射
Classone
Classtwo
@Entity
@Table(name="t_group")
publicclassGroup{
privateintid;
privateStringname;
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
……get/set
}
@Entity
@Table(name="t_user")
publicclassUser{
privateintid;
privateStringname;
privateGroupgroup;
@ManyToOne
publicGroupgetGroup(){
returngroup;
}
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
……get/set
}
7、one-to-many单向关联
7.1、xml映射
Class
Xml
publicclassGroup{
privateintid;
privateStringname;
privateSetusers=newHashSet();
……get/set
}
publicclassUser{
privateintid;
privateStringname;
……get/set
}
一个组有多个用户,一个用户只能有一个组;多记少。
7.2、Annotations映射
Classone
Classtwo
@Entity
@Table(name="t_group")
publicclassGroup{
privateintid;
privateStringname;
privateSetusers=newHashSet();
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
@OneToMany
@JoinColumn(name="groupId")
publicSetgetUsers(){
returnusers;
}
……get/set
}
@Entity
@Table(name="t_user")
publicclassUser{
privateintid;
privateStringname;
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
……get/set
}
8、one-to-many/many-to-one双向关联
8.1、xml映射
Class
Xml
publicclassGroup{
privateintid;
privateStringname;
privateSetusers=newHashSet();
……get/set
}
publicclassUser{
privateintid;
privateStringname;
privateGroupgroup;
……get/set
}
8.2、Annotations映射
Classone
Classtwo
@Entity
@Table(name="group")
publicclassGroup{
privateintid;
privateStringname;
privateSetusers=newHashSet();
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
@OneToMany(mappedBy="group")
publicSetgetUsers(){
returnusers;
}
……get/set
}
@Entity
@Table(name="t_user")
publicclassUser{
privateintid;
privateStringname;
privateGroupgroup;
@ManyToOne
publicGroupgetGroup(){
returngroup;
}
@Id
@GeneratedValue
publicintgetId(){
returnid;
}
……get/set
}
9、many-to-many单向关联
9.1、xml映射
Class
Xml
publicclassStudent{
privateintid;
privateStringname;
publicclassTeacher{
privateintid;
privateStringname;
privateSetstudents=new
HashSet();