Hibernate_关联关系映射配置Hibernate_关联关系映射配置
Hibernate关联关系映射配置 ...................................................................................................... 3 一、 一对一单向外键关联: .......................................................................................... 3
1.1目录结构 ..........
Hibernate_关联关系映射配置
Hibernate关联关系映射配置 ...................................................................................................... 3 一、 一对一单向外键关联: .......................................................................................... 3
1.1
结构 ................................................................................................................... 3
1.2 Annotation方式 .................................................................................................... 3
1.3 XML方式 ................................................................................................................. 5
1.4 Hibernate配置文件 ............................................................................................... 8 二、一对一双向外键关联 ...................................................................................................... 9
2.1 Annotation方式 .................................................................................................... 9
2.2 XML方式 ............................................................................................................... 11 三、一对一单向主键关联,不重要, ................................................................................ 13
3.1 Annotation方式 .................................................................................................. 13
3.2 XML方式 ............................................................................................................... 16 四、一对一双向主键关联,不重要, ................................................................................ 18
4.1 Annotation方式 .................................................................................................. 18
3.2 XML方式 ............................................................................................................... 21 五、组件映射 ........................................................................................................................ 23
5.1 Annotation方式 .................................................................................................. 23
5.2 XML方式 ............................................................................................................... 25 六、多对一单向关联 ............................................................................................................ 28
6.1 Annotation方式 .................................................................................................. 28
6.2 XML方式 ............................................................................................................... 30 七、一对多单向关联 ............................................................................................................ 32
1
7.1 Annotation方式 .................................................................................................. 32
7.2 XML方式 ............................................................................................................... 35 八、一对多、多对一双向关联 ............................................................................................ 37
8.1 Annotation方式 .................................................................................................. 37
8.2 XML方式 ............................................................................................................... 40 九、多对多单向关联 ............................................................................................................ 43
8.1 Annotation方式 .................................................................................................. 43
8.2 XML方式 ............................................................................................................... 45 十、多对多双向关联 ............................................................................................................ 48
8.1 Annotation方式 .................................................................................................. 48
8.2 XML方式 ............................................................................................................... 51
2
Hibernate关联关系映射配置 一、 一对一单向外键关联:
1.1目录结构
图1-1 目录结构图
1.2 Annotation方式
1.2.1 类图
图1-2 类关联关系图
1.2.2数据库表结构
3
H_HUSBAND_
IDNUMBER(4)
NAMEVARCHAR2(30 char)
WIFE_IDNUMBER(4)FK133651BB21A8E0C8H_WIFE_
IDNUMBER(4)
NAMEVARCHAR2(30 char)
图1-3数据库表结构图
1.2.3 实体类
package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator; @Entity(name="H_HUSBAND_")
@SequenceGenerator(name="husband_seq_gene", sequenceName="HUSBAND_SEQ", allocationSize=1)
public class Husband {
private BigDecimal id;
private String name;
private Wife wife;
@Id
@Column(precision=4, scale=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="husband_seq_gene")
public BigDecimal getId() {
return id;
}
@Column(length=30)
public String getName() {
return name;
}
@OneToOne
//@JoinColumn(name="wife_id")//不写也没问,自动生成的字段也叫wife_id
public Wife getWife() {
return wife;
}
public void setId(BigDecimal id) {
4
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
@Entity(name="H_WIFE_")
@SequenceGenerator(name="wife_seq_gene", sequenceName="WIFE_SEQ") public class Wife {
private BigDecimal id;
private String name;
@Id
@Column(precision=4)
SEQUENCE, generator="wife_seq_gene") @GeneratedValue(strategy=GenerationType.
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
@Column(length=30)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
1.3 XML方式
1.3.1 类图
5
图1-4 类关联关系图
1.3.2 数据库表结构
H_HUSBAND_XML
IDNUMBER(4)
NAMEVARCHAR2(30 char)
WIFE_IDNUMBER(19,2)
FKBE32645CF8BD16F4
H_WIFE_XML
IDNUMBER(4)
NAMEVARCHAR2(30 char)
图1-5数据库表结构图
1.3.3 实体类
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal;
public class XML_Husband {
private BigDecimal id;
private String name;
private XML_Wife wife;
public BigDecimal getId() {
return id;
}
public String getName() {
return name;
}
public XML_Wife getWife() {
return wife;
}
public void setId(BigDecimal id) {
this.id = id;
}
6
public void setName(String name) {
this.name = name;
}
public void setWife(XML_Wife wife) {
this.wife = wife;
}
}
package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal;
public class XML_Wife {
private BigDecimal id;
private String name;
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
1.3.4 对象关系映射文件
"id""4""0"
"sequence"
H_STUDENT_SEQ_XML
7
"id""4""0"
"sequence"
H_STUDENT_SEQ_XML "sequence"
"name""30"
1.4 Hibernate配置文件
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@127.0.0.1:1521:silence
cnuser
cn830306
1
thread
org.hibernate.cache.NoCacheProvider
true
true
org.hibernate.dialect.Oracle9Dialect
8
/>
二、一对一双向外键关联
2.1 Annotation方式
2.1.1 类图
图2-1类关联关系图
2.1.2 数据库结构图
H_HUSBAND_
IDNUMBER(4)
NAMEVARCHAR2(30 char)
WIFE_IDNUMBER(4)
FK133651BB21A8E0C8
H_WIFE_
IDNUMBER(4)
NAMEVARCHAR2(30 char)
图2-2数据库表结构图
2.1.3 实体类
@Entity(name="H_HUSBAND_")
@SequenceGenerator(name="husband_seq_gene", sequenceName="HUSBAND_SEQ",
allocationSize=1)
public class Husband {
private BigDecimal id;
private String name;
private Wife wife;
@Id
@Column(precision=4, scale=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="husband_seq_gene")
public BigDecimal getId() {
9
return id;
}
@Column(length=30)
public String getName() {
return name;
}
@OneToOne
//@JoinColumn(name="wife_id")//不写也没问题,自动生成的字段也叫wife_id
public Wife getWife() {
return wife;
}
public void setId(BigDecimal id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
@Entity(name="H_WIFE_")
@SequenceGenerator(name="wife_seq_gene", sequenceName="WIFE_SEQ") public class Wife {
private BigDecimal id;
private String name;
private Husband husband;
@Id
@Column(precision=4)
SEQUENCE, generator="wife_seq_gene") @GeneratedValue(strategy=GenerationType.
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
@Column(length=30)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToOne(mappedBy="wife")
10
public Husband getHusband() {
return husband;
}
public void setHusband(Husband husband) {
this.husband = husband;
}
}
2.2 XML方式
2.2.1 类图
图2-3 类关联关系图
2.2.2 数据库结构图
H_HUSBAND_XML
IDNUMBER(4)
NAMEVARCHAR2(30 char)
WIFE_IDNUMBER(4,2)
FKBE32645CF8BD16F4
H_WIFE_XML
IDNUMBER(4)
NAMEVARCHAR2(30 char)
2.2.3 实体类
package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal;
public class XML_Husband {
private BigDecimal id;
private String name;
private XML_Wife wife;
public BigDecimal getId() {
return id;
}
public String getName() {
return name;
}
11
public XML_Wife getWife() {
return wife;
}
public void setId(BigDecimal id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(XML_Wife wife) {
this.wife = wife;
}
}
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal; public class XML_Wife {
private BigDecimal id;
private String name;
private XML_Husband husband;
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public XML_Husband getHusband() {
return husband;
}
public void setHusband(XML_Husband husband) {
this.husband = husband;
}
}
2.2.4 对象关系映射文件
"XML_Husband""H_HUSBAND_XML""true"
H_STUDENT_SEQ_XML
"wife""true""true"
"wife_id""4"
"1.0"
H_STUDENT_SEQ_XML
三、一对一单向主键关联,不重要,
3.1 Annotation方式
3.1.1 类图
13
图3-1 类关联关系图
3.1.2 数据库表结构
H_WIFE_H_HUSBAND_IDNUMBER(4)IDNUMBER(4)NAMEVARCHAR2(30 char)NAMEVARCHAR2(30 char)
图3-2 数据库表结构图
3.1.3 实体类
package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.SequenceGenerator; @Entity(name="H_HUSBAND_")
@SequenceGenerator(name="husband_seq_gene", sequenceName="HUSBAND_SEQ", allocationSize=1)
public class Husband {
private BigDecimal id;
private String name;
private Wife wife;
@Id
@Column(precision=4, scale=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="husband_seq_gene")
public BigDecimal getId() {
return id;
}
@Column(length=30)
public String getName() {
14
return name;
}
@OneToOne
@PrimaryKeyJoinColumn
public Wife getWife() {
return wife;
}
public void setId(BigDecimal id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id; import javax.persistence.SequenceGenerator;
@Entity(name="H_WIFE_")
@SequenceGenerator(name="wife_seq_gene", sequenceName="WIFE_SEQ") public class Wife {
private BigDecimal id;
private String name;
@Id
@Column(precision=4)
SEQUENCE, generator="wife_seq_gene") @GeneratedValue(strategy=GenerationType.
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
@Column(length=30)
public String getName() {
return name;
}
public void setName(String name) {
15
this.name = name;
}
}
注:只生成了表,但是没有外键约束,具体实现还需要查找 3.2 XML方式
3.2.1 类图
图3-3 类关联关系图
3.2.2 数据库表结构
H_HUSBAND_XML
IDNUMBER(4)
NAMEVARCHAR2(30 char)
FKBE32645CA8BE0706
H_WIFE_XML
IDNUMBER(4)
NAMEVARCHAR2(30 char)
图3-4 数据库表结构图
3.2.3 实体类
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal;
public class XML_Husband {
private BigDecimal id;
private String name;
private XML_Wife wife;
16
public BigDecimal getId() {
return id;
}
public String getName() {
return name;
}
public XML_Wife getWife() {
return wife;
}
public void setId(BigDecimal id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(XML_Wife wife) {
this.wife = wife;
}
}
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal; import com.rongqq.hibernate3.annotation.entity.Husband;
public class XML_Wife {
private BigDecimal id;
private String name;
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3.2.4 对象映射文件
"XML_Husband""H_HUSBAND_XML""true"
wife
"name""30"
"wife""true"
"1.0"
H_STUDENT_SEQ_XML
四、一对一双向主键关联,不重要,
4.1 Annotation方式
4.1.1 类图
图4-1 类关联关系图
18
4.1.2 数据库表结构
H_HUSBAND_
IDNUMBER(4)
NAMEVARCHAR2(30 char)H_WIFE_
IDNUMBER(4)
NAMEVARCHAR2(30 char)
图4-2 数据库表结构图
4.1.3 实体类
package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.SequenceGenerator; @Entity(name="H_HUSBAND_")
@SequenceGenerator(name="husband_seq_gene", sequenceName="HUSBAND_SEQ", allocationSize=1)
public class Husband {
private BigDecimal id;
private String name;
private Wife wife;
@Id
@Column(precision=4, scale=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="husband_seq_gene")
public BigDecimal getId() {
return id;
}
@Column(length=30)
public String getName() {
return name;
}
@OneToOne
@PrimaryKeyJoinColumn
public Wife getWife() {
return wife;
19
}
public void setId(BigDecimal id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SequenceGenerator; @Entity(name="H_WIFE_")
@SequenceGenerator(name="wife_seq_gene", sequenceName="WIFE_SEQ") public class Wife {
private BigDecimal id;
private String name;
private Husband husband;
@Id
@Column(precision=4)
SEQUENCE, generator="wife_seq_gene") @GeneratedValue(strategy=GenerationType.
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
@Column(length=30)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToOne
20
@PrimaryKeyJoinColumn
public Husband getHusband() {
return husband;
}
public void setHusband(Husband husband) {
this.husband = husband;
}
}
注:同样不产生关联关系,具体实现待查 3.2 XML方式
4.2.1 类图
图4-3 类关联关系图
4.2.2 数据库表结构
H_HUSBAND_XML
IDNUMBER(4)
NAMEVARCHAR2(30 char)
FKBE32645CA8BE0706
H_WIFE_XML
IDNUMBER(4)
NAMEVARCHAR2(30 char)
图4-4 数据库表结构图
4.2.3 实体类
package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal;
public class XML_Husband {
private BigDecimal id;
private String name;
private XML_Wife wife;
21
public BigDecimal getId() {
return id;
}
public String getName() {
return name;
}
public XML_Wife getWife() {
return wife;
}
public void setId(BigDecimal id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(XML_Wife wife) {
this.wife = wife;
}
}
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal; public class XML_Wife {
private BigDecimal id;
private String name;
private XML_Husband husband;
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public XML_Husband getHusband() {
return husband;
}
public void setHusband(XML_Husband husband) {
this.husband = husband;
}
}
22
4.2.4 对象映射文件
"id""4""0"
"foreign"
wife "property"
"name""30"
H_STUDENT_SEQ_XML
五、组件映射
5.1 Annotation方式
5.1.1 类图
23
图5-1 类关联关系图
5.1.2 数据库表结构
H_HUSBAND_
IDNUMBER(4)
NAMEVARCHAR2(30 char)
AGENUMBER(3)
WIFENAMEVARCHAR2(255 char)
图5-2 数据库表结构图
5.1.3 实体类
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.SequenceGenerator; @Entity(name="H_HUSBAND_")
@SequenceGenerator(name="husband_seq_gene", sequenceName="HUSBAND_SEQ", allocationSize=1)
public class Husband {
private BigDecimal id;
private String name;
private Wife wife;
@Id
@Column(precision=4, scale=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="husband_seq_gene")
public BigDecimal getId() {
return id;
}
@Column(length=30)
public String getName() {
return name;
24
}
@Embedded
public Wife getWife() {
return wife;
}
public void setId(BigDecimal id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal; import javax.persistence.Column; public class Wife {
private String name;
private BigDecimal age;
@Column(name="wifeName")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(precision=3)
public BigDecimal getAge() {
return age;
}
public void setAge(BigDecimal age) {
this.age = age;
}
}
5.2 XML方式
5.2.1 类图
25
图5-3 类关联关系图
5.2.2 数据库表结构
H_HUSBAND_XML
IDNUMBER(4)
NAMEVARCHAR2(30 char)
WIFENAMEVARCHAR2(255 char)
AGENUMBER(3,2)
图5-4 数据库表结构图
5.2.3 实体类
package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal;
public class XML_Husband {
private BigDecimal id;
private String name;
private XML_Wife wife;
public BigDecimal getId() {
return id;
}
public String getName() {
return name;
}
public XML_Wife getWife() {
return wife;
}
public void setId(BigDecimal id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(XML_Wife wife) {
this.wife = wife;
}
}
package com.rongqq.hibernate3.xml.entity;
26
import java.math.BigDecimal; public class XML_Wife {
private String name;
private BigDecimal age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getAge() {
return age;
}
public void setAge(BigDecimal age) {
this.age = age;
}
}
5.2.4 对象映射文件
wife
"age""AGE""3"
27
六、多对一单向关联
6.1 Annotation方式
6.1.1 类图,说明:一个人具备多套房子的所有权,这么多套房子属于这个人,
图6-1 类关联关系图
6.1.2 数据库表结构
H_HOUSE_
IDNUMBER(20)
POSITIONVARCHAR2(255 char)
PERSON_IDNUMBER(21)
FK5822AD3634FDD6C8
H_PERSON_
IDNUMBER(21)
NAMEVARCHAR2(255 char)
图6-2 数据库表结构图
6.1.3 实体类
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
@Entity(name="H_HOUSE_")
@SequenceGenerator(name="HouseGene", sequenceName="H_HOUSE_SEQ",
allocationSize=1)
public class House {
28
private BigDecimal id;
private String position;
private Person person;//House(多)-Person(一),一个人可以有多个房子,而这些房子属于这一个人
@Id
@Column(precision=20)
SEQUENCE, generator="HouseGene") @GeneratedValue(strategy=GenerationType.
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
@ManyToOne
//@JoinColumn(name=””)//可以指定外键名称
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.SequenceGenerator; @Entity(name="H_PERSON_")
@SequenceGenerator(name="PersonGene", sequenceName="H_PERSON_SEQ", allocationSize=1)
public class Person {
private BigDecimal Id;
private String name;
@Id
@Column(precision=21)
29
, generator="PersonGene") @GeneratedValue(strategy=GenerationType.SEQUENCE
public BigDecimal getId() {
return Id;
}
public void setId(BigDecimal id) {
Id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
6.2 XML方式
6.2.1 类图,说明:一个人具备多套房子的所有权,这么多套房子属于这个人,
图6-3 类关联关系图
6.2.2 数据库表结构
H_HOUSE_XML
IDNUMBER(20)POSITIONVARCHAR2(255 char)PERSON_IDNUMBER(21)
FK6B5C130197DD31F4
H_PERSON_XML
IDNUMBER(21)NAMEVARCHAR2(255 char)
图6-4 数据库表结构图
6.2.3 实体类
package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal;
public class XML_House {
30
private BigDecimal id;
private String position;
private XML_Person person;
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public XML_Person getPerson() {
return person;
}
public void setPerson(XML_Person person) {
this.person = person;
}
}
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal; public class XML_Person {
private BigDecimal Id;
private String name;
public BigDecimal getId() {
return Id;
}
public void setId(BigDecimal id) {
Id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
6.2.4 对象映射文件
H_HOUSE_XML_SEQ
> "person"
"PERSON_ID""21""0"
H_XML_PERSON_SEQ
注:,表,原则,在多的一方加外键
七、一对多单向关联
7.1 Annotation方式
7.1.1 类图,说明:一个人具备多套房子的所有权,这么多套房子属于这个人,
32
图7-1 类关联关系图
7.1.2 数据库表结构
H_HOUSE_
IDNUMBER(20)
POSITIONVARCHAR2(255 char)
HOUSE_IDNUMBER(21)
FK5822AD36F39C131D
H_PERSON_
IDNUMBER(21)
NAMEVARCHAR2(255 char)
图7-2 数据库表结构图
7.1.3 实体类
package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.SequenceGenerator; @Entity(name="H_PERSON_")
@SequenceGenerator(name="PersonGene", sequenceName="H_PERSON_SEQ", allocationSize=1)
public class Person {
private BigDecimal Id;
private String name;
private Set houses = new HashSet();
@Id
@Column(precision=21)
33
, generator="PersonGene") @GeneratedValue(strategy=GenerationType.SEQUENCE
public BigDecimal getId() {
return Id;
}
public void setId(BigDecimal id) {
Id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany
@JoinColumn(name="HOUSE_ID")//不加会生成由一张中间表连接的共三张表
public Set getHouses() {
return houses;
}
public void setHouses(Set houses) {
this.houses = houses;
}
}
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.SequenceGenerator; @Entity(name="H_HOUSE_")
@SequenceGenerator(name="HouseGene", sequenceName="H_HOUSE_SEQ", allocationSize=1)
public class House {
private BigDecimal id;
private String position;
@Id
@Column(precision=20)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="HouseGene")
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
34
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
7.2 XML方式
7.2.1 类图,说明:一个人具备多套房子的所有权,这么多套房子属于这个人,
图7-3 类关联关系图
7.2.2 数据库表结构
H_PERSON_XML
IDNUMBER(21)
NAMEVARCHAR2(255 char)
FK6B5C130197DD31F4
H_HOUSE_XML
IDNUMBER(20)
POSITIONVARCHAR2(255 char)
PERSON_IDNUMBER(21,2)
图7-4 数据库表结构图
7.2.3 实体类
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
public class XML_Person {
private BigDecimal Id;
private String name;
private Set houses = new HashSet();
35
public BigDecimal getId() {
return Id;
}
public void setId(BigDecimal id) {
Id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getHouses() {
return houses;
}
public void setHouses(Set houses) {
this.houses = houses;
}
}
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal; public class XML_House {
private BigDecimal id;
private String position;
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
7.2.4 对象映射文件
36
table= dynamic-update=> "id""big_decimal"
H_XML_PERSON_SEQ
"PERSON_ID""21"
"XML_House"
H_HOUSE_XML_SEQ
八、一对多、多对一双向关联
8.1 Annotation方式
8.1.1 类图
37
图8-1 类关联关系图
8.1.2 数据库表结构
H_PERSON_
IDNUMBER(21)
NAMEVARCHAR2(255 char)
FK5822AD3634FDD6C8
H_HOUSE_
IDNUMBER(20)
POSITIONVARCHAR2(255 char)
PERSON_IDNUMBER(21)
图8-2 数据库表结构图
8.1.3 实体类
package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator; @Entity(name="H_HOUSE_")
@SequenceGenerator(name="HouseGene", sequenceName="H_HOUSE_SEQ", allocationSize=1)
public class House {
private BigDecimal id;
private String position;
private Person person;
@Id
@Column(precision=20)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="HouseGene")
public BigDecimal getId() {
return id;
}
38
public void setId(BigDecimal id) {
this.id = id;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
@ManyToOne//如果需要指定外键字段使用@JoinColumn(name="PERSON_ID")
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.OneToMany; import javax.persistence.SequenceGenerator; @Entity(name="H_PERSON_")
@SequenceGenerator(name="PersonGene", sequenceName="H_PERSON_SEQ", allocationSize=1)
public class Person {
private BigDecimal Id;
private String name;
private Set houses = new HashSet();
@Id
@Column(precision=21)
SEQUENCE, generator="PersonGene") @GeneratedValue(strategy=GenerationType.
public BigDecimal getId() {
return Id;
}
public void setId(BigDecimal id) {
Id = id;
}
39
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(mappedBy="person")//参考了对方的属性名
public Set getHouses() {
return houses;
}
public void setHouses(Set houses) {
this.houses = houses;
}
}
8.2 XML方式
8.2.1 类图
图8-3 类关联关系图
8.2.2 数据库表结构
H_PERSON_XML
IDNUMBER(21)
NAMEVARCHAR2(255 char)
FK6B5C130197DD31F4
H_HOUSE_XML
IDNUMBER(20)
POSITIONVARCHAR2(255 char)
PERSON_IDNUMBER(19,2)
图8-4 数据库表结构图
8.2.3 实体类
package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal;
40
public class XML_House {
private BigDecimal id;
private String position;
private XML_Person person;
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public XML_Person getPerson() {
return person;
}
public void setPerson(XML_Person person) {
this.person = person;
}
}
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal; import java.util.HashSet;
import java.util.Set;
public class XML_Person {
private BigDecimal Id;
private String name;
private Set houses = new HashSet();
public BigDecimal getId() {
return Id;
}
public void setId(BigDecimal id) {
Id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getHouses() {
41
return houses;
}
public void setHouses(Set houses) {
this.houses = houses;
}
}
8.2.4 对象映射文件
"XML_Person""H_PERSON_XML""true"
"id""big_decimal"
H_XML_PERSON_SEQ
-->
H_HOUSE_XML_SEQ
42
column=/>
九、多对多单向关联
9.1 Annotation方式
9.1.1 类图
图9-1 类关联关系图
9.1.2 数据库表结构
H_TEACHER_H_STUDENT_
IDNUMBER(19,2)IDNUMBER(19,2)NAMEVARCHAR2(255 char)NAMEVARCHAR2(255 char)
FK42312B1CDC4D30CFK42312B1BD29886C
H_T_S
TEACHER_IDNUMBER(19,2)STUDENT_IDNUMBER(19,2)
图9-2 数据库表结构图
9.1.3 实体类
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
43
import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity(name="T")//name是用来在HQL语句中应用的本类的名字 @Table(name="H_TEACHER_")//数据库中当前类对应的表名
@SequenceGenerator(name="Teacher_Gene", sequenceName="H_TEACHER_SEQ", allocationSize=1)
public class Teacher {
private BigDecimal id;
private String name;
private Set students = new HashSet();
@Id
, generator="Teacher_Gene") SEQUENCE @GeneratedValue(strategy=GenerationType.
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany
@JoinTable(
name="H_T_S",//指明中间表的名字
joinColumns={@JoinColumn(name="TEACHER_ID", referencedColumnName="ID")},
//指明中间表参考当前类对应数据库表中的字段ID的外键名为TEACHER_ID
inverseJoinColumns={@JoinColumn(name="STUDENT_ID",referencedColumnName=
"ID")}
//指明中间表参考另外一张表中的字段ID的外键名为STUDENT_ID
)
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this.students = students;
}
}
44
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.SequenceGenerator; import javax.persistence.Table;
@Entity(name="S")
@Table(name="H_STUDENT_")
@SequenceGenerator(name="Student_Gene", sequenceName="H_STUDENT_SEQ", allocationSize=1)
public class Student {
private BigDecimal id;
private String name;
@Id
SEQUENCE, generator="Student_Gene") @GeneratedValue(strategy=GenerationType.
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
9.2 XML方式
9.2.1 类图
图8-3 类关联关系图
9.2.2 数据库表结构
45
H_STUDENT_XMLH_TEACHER_XMLIDNUMBER(21)IDNUMBER(20)NAMEVARCHAR2(255 char)NAMEVARCHAR2(255 char)
FKF6B3D5E9F1759EF0FKF6B3D5E9C6D0DD60
H_XML_T_S
TEACHER_IDNUMBER(19,2)SUTDNET_IDNUMBER(19,2)
图8-4 数据库表结构图
9.2.3 实体类
package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
public class XML_Teacher {
private BigDecimal id;
private String name;
private Set students = new HashSet();
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this.students = students;
}
}
package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal;
public class XML_Student {
private BigDecimal id;
private String name;
46
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
9.2.4 对象映射文件
H_TEACHER_XML_SEQ
47
> H_XML_STUDENT_SEQ "sequence"
十、多对多双向关联
10.1 Annotation方式
10.1.1 类图
图10-1 类关联关系图
10.1.2 数据库表结构
H_TEACHER_H_STUDENT_
IDNUMBER(19,2)IDNUMBER(19,2)
NAMEVARCHAR2(255 char)NAMEVARCHAR2(255 char)
FK42312B1CDC4D30CFK42312B1BD29886C
H_T_S
TEACHER_IDNUMBER(19,2)
STUDENT_IDNUMBER(19,2)
图10-2 数据库表结构图
10.1.3 实体类
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
48
import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.ManyToMany; import javax.persistence.SequenceGenerator; import javax.persistence.Table;
@Entity(name="S")
@Table(name="H_STUDENT_")
@SequenceGenerator(name="Student_Gene", sequenceName="H_STUDENT_SEQ", allocationSize=1)
public class Student {
private BigDecimal id;
private String name;
private Set teachers = new HashSet();
@Id
, generator="Student_Gene") SEQUENCE @GeneratedValue(strategy=GenerationType.
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany(mappedBy="students")
public Set getTeachers() {
return teachers;
}
public void setTeachers(Set teachers) {
this.teachers = teachers;
}
}
package com.rongqq.hibernate3.annotation.entity;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id;
import javax.persistence.JoinColumn;
49
import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.SequenceGenerator; import javax.persistence.Table;
@Entity(name="T")
@Table(name="H_TEACHER_")
@SequenceGenerator(name="Teacher_Gene", sequenceName="H_TEACHER_SEQ", allocationSize=1)
public class Teacher {
private BigDecimal id;
private String name;
private Set students = new HashSet();
@Id
, generator="Teacher_Gene") SEQUENCE @GeneratedValue(strategy=GenerationType.
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany
@JoinTable(
name="H_T_S",//指明中间表的名字
joinColumns={@JoinColumn(name="TEACHER_ID",
referencedColumnName="ID")},
//指明中间表参考当前类对应数据库表中的字段ID的外键名为TEACHER_ID
inverseJoinColumns={@JoinColumn(name="STUDENT_ID",
referencedColumnName="ID")}
//指明中间表参考另外一张表中的字段ID的外键名为STUDENT_ID
)
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this.students = students;
}
}
50
10.2 XML方式
10.2.1 类图
图10-3 类关联关系图
10.2.2 数据库表结构
H_TEACHER_XMLH_STUDENT_XML
IDNUMBER(20)IDNUMBER(21)
NAMEVARCHAR2(255 char)NAMEVARCHAR2(255 char)
FKF6B3D5E9C6D0DD60FKF6B3D5E9B63592C0
H_XML_T_S
STUDENT_IDNUMBER(19,2)
TEACHER_IDNUMBER(19,2)
图10-4 数据库表结构图
10.2.3 实体类
package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
public class XML_Teacher {
private BigDecimal id;
private String name;
private Set students = new HashSet();
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
51
}
public void setName(String name) {
this.name = name;
}
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this.students = students;
}
}
package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
public class XML_Student {
private BigDecimal id;
private String name;
private Set teachers = new HashSet();
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getTeachers() {
return teachers;
}
public void setTeachers(Set teachers) {
this.teachers = teachers;
}
}
10.2.4 对象映射文件
"XML_Teacher""H_TEACHER_XML""true"
H_TEACHER_XML_SEQ
"students""H_XML_T_S"
"TEACHER_ID"
"XML_Student""STUDENT_ID"
H_XML_STUDENT_SEQ
"XML_Teacher""TEACHER_ID"
53
本文档为【Hibernate_关联关系映射配置】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。