Hibernate關聯關系映射配置 2
一、 一對一單向外鍵關聯: 2
1.1目錄結構 2
1.2 Annotation方式 2
1.3 XML方式 4
1.4 Hibernate配置文件 7
二、一對一雙向外鍵關聯 7
2.1 Annotation方式 7
2.2 XML方式 9
三、一對一單向主鍵關聯(不重要) 12
3.1 Annotation方式 12
3.2 XML方式 14
四、一對一雙向主鍵關聯(不重要) 16
4.1 Annotation方式 16
3.2 XML方式 19
五、組件映射 21
5.1 Annotation方式 21
5.2 XML方式 23
六、多對一單向關聯 25
6.1 Annotation方式 25
6.2 XML方式 27
七、一對多單向關聯 29
7.1 Annotation方式 29
7.2 XML方式 31
八、一對多、多對一雙向關聯 34
8.1 Annotation方式 34
8.2 XML方式 36
九、多對多單向關聯 39
8.1 Annotation方式 39
8.2 XML方式 41
十、多對多雙向關聯 44
8.1 Annotation方式 44
8.2 XML方式 46
Hibernate關聯關系映射配置
一、 一對一單向外鍵關聯:
1.1目錄結構
圖1-1 目錄結構圖
1.2 Annotation方式
1.2.1 類圖
圖1-2 類關聯關系圖
1.2.2數據庫表結構
圖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) {
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)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="wife_seq_gene")
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 類圖
圖1-4 類關聯關系圖
1.3.2 數據庫表結構
圖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;
}
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 對象關系映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Husband" table="H_HUSBAND_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="id" precision="4" scale="0" />
<generator class="sequence">
<param name="sequence">H_STUDENT_SEQ_XML</param>
</generator>
</id>
<property name="name" length="30"></property>
<many-to-one name="wife" column="wife_id" unique="true" not-null="true" />
<!--many-to-one是站在當前類XML_Husband的角度來看,XML_Husband與wife是多對一-->
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Wife" table="H_Wife_XML" dynamic-update="true">
<id name="id">
<column name="id" precision="4" scale="0" />
<generator class="sequence">
<param name="sequence">H_STUDENT_SEQ_XML</param>
</generator>
</id>
<property name="name" length="30" />
</class>
</hibernate-mapping>
1.4 Hibernate配置文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:silence</property>
<property name="connection.username">cnuser</property>
<property name="connection.password">cn830306</property>
<property name="connection.pool_size">1</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<!--<property name="hbm2ddl.auto">update</property>-->
<mapping class="com.rongqq.hibernate3.annotation.entity.Husband" />
<mapping class="com.rongqq.hibernate3.annotation.entity.Wife" />
<mapping resource="com/rongqq/hibernate3/xml/entity/XML_Husband.hbm.xml" />
<mapping resource="com/rongqq/hibernate3/xml/entity/XML_Wife.hbm.xml" />
</session-factory>
</hibernate-configuration>
二、一對一雙向外鍵關聯
2.1 Annotation方式
2.1.1 類圖
圖2-1類關聯關系圖
2.1.2 數據庫結構圖
圖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() {
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)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="wife_seq_gene")
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")
public Husband getHusband() {
return husband;
}
public void setHusband(Husband husband) {
this.husband = husband;
}
}
2.2 XML方式
2.2.1 類圖
圖2-3 類關聯關系圖
2.2.2 數據庫結構圖
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;
}
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 version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Husband" table="H_HUSBAND_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="id" precision="4" scale="0" />
<generator class="sequence">
<param name="sequence">H_STUDENT_SEQ_XML</param>
</generator>
</id>
<property name="name" length="30"></property>
<many-to-one name="wife" unique="true" not-null="true" >
<column name="wife_id" precision="4"></column>
</many-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Wife" table="H_Wife_XML" dynamic-update="true">
<id name="id">
<column name="id" precision="4" scale="0" />
<generator class="sequence">
<param name="sequence">H_STUDENT_SEQ_XML</param>
</generator>
</id>
<property name="name" length="30" />
<!-- 這里的wife是XML_Husband類中的屬性名,表示這里的關聯關系已經由Husband的對象
映射文件的wife屬性上定義過了 -->
<one-to-one name="husband" property-ref="wife" />
</class>
</hibernate-mapping>
三、一對一單向主鍵關聯(不重要)
3.1 Annotation方式
3.1.1 類圖
圖3-1 類關聯關系圖
3.1.2 數據庫表結構
圖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() {
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)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="wife_seq_gene")
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;
}
}
注:只生成了表,但是沒有外鍵約束,具體實現還需要查找
3.2 XML方式
3.2.1 類圖
圖3-3 類關聯關系圖
3.2.2 數據庫表結構
圖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;
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 version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Husband" table="H_HUSBAND_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="id" precision="4" scale="0" />
<generator class="foreign">
<!-- 指明具體參考哪一個外鍵,因為一張表可能存在多個外鍵 -->
<param name="property">wife</param>
</generator>
</id>
<property name="name" length="30"></property>
<one-to-one name="wife" constrained="true"></one-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Wife" table="H_Wife_XML" dynamic-update="true">
<id name="id">
<column name="id" precision="4" scale="0" />
<generator class="sequence">
<param name="sequence">H_STUDENT_SEQ_XML</param>
</generator>
</id>
<property name="name" length="30" />
</class>
</hibernate-mapping>
四、一對一雙向主鍵關聯(不重要)
4.1 Annotation方式
4.1.1 類圖
圖4-1 類關聯關系圖
4.1.2 數據庫表結構
圖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;
}
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)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="wife_seq_gene")
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
@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 數據庫表結構
圖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;
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;
}
}
4.2.4 對象映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Husband" table="H_HUSBAND_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="id" precision="4" scale="0" />
<generator class="foreign">
<param name="property">wife</param>
</generator>
</id>
<property name="name" length="30"></property>
<one-to-one name="wife" constrained="true"></one-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Wife" table="H_Wife_XML" dynamic-update="true">
<id name="id">
<column name="id" precision="4" scale="0" />
<generator class="sequence">
<param name="sequence">H_STUDENT_SEQ_XML</param>
</generator>
</id>
<property name="name" length="30" />
<one-to-one name="husband" property-ref="wife"></one-to-one>
</class>
</hibernate-mapping>
五、組件映射
5.1 Annotation方式
5.1.1 類圖
圖5-1 類關聯關系圖
5.1.2 數據庫表結構
圖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;
}
@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 類圖
圖5-3 類關聯關系圖
5.2.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;
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 對象映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Husband" table="H_HUSBAND_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="id" precision="4" scale="0" />
<generator class="foreign">
<param name="property">wife</param>
</generator>
</id>
<property name="name" length="30"></property>
<component name="wife">
<property name="name" column="WIFENAME" />
<property name="age" column="AGE" precision="3" />
</component>
</class>
</hibernate-mapping>
六、多對一單向關聯
6.1 Annotation方式
6.1.1 類圖(說明:一個人具備多套房子的所有權,這么多套房子屬於這個人)
圖6-1 類關聯關系圖
6.1.2 數據庫表結構
圖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 {
private BigDecimal id;
private String position;
private Person person;//House(多)-Person(一),一個人可以有多個房子,而這些房子屬於這一個人
@Id
@Column(precision=20)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="HouseGene")
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)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PersonGene")
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 數據庫表結構
圖6-4 數據庫表結構圖
6.2.3 實體類
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal;
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;
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 對象映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_House" table="H_HOUSE_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="ID" precision="20" scale="0" />
<generator class="sequence">
<param name="sequence">H_HOUSE_XML_SEQ</param>
</generator>
</id>
<property name="position"></property>
<many-to-one name="person">
<column name="PERSON_ID" precision="21" scale="0" />
</many-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Person" table="H_PERSON_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="ID" precision="21" scale="0" />
<generator class="sequence">
<param name="sequence">H_XML_PERSON_SEQ</param>
</generator>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
注:(表)設計原則,在多的一方加外鍵
七、一對多單向關聯
7.1 Annotation方式
7.1.1 類圖(說明:一個人具備多套房子的所有權,這么多套房子屬於這個人)
圖7-1 類關聯關系圖
7.1.2 數據庫表結構
圖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<House> houses = new HashSet<House>();
@Id
@Column(precision=21)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PersonGene")
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<House> getHouses() {
return houses;
}
public void setHouses(Set<House> 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;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
7.2 XML方式
7.2.1 類圖(說明:一個人具備多套房子的所有權,這么多套房子屬於這個人)
圖7-3 類關聯關系圖
7.2.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<XML_House> houses = new HashSet<XML_House>();
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<XML_House> getHouses() {
return houses;
}
public void setHouses(Set<XML_House> 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 對象映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Person" table="H_PERSON_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="ID" precision="21" scale="0" />
<generator class="sequence">
<param name="sequence">H_XML_PERSON_SEQ</param>
</generator>
</id>
<property name="name"/>
<set name="houses">
<key><!-- 指定H_HOUSE_XML表中的外鍵字段名,也可以<key column="PERSON_ID" /> -->
<column name="PERSON_ID" precision="21" />
</key>
<one-to-many class="XML_House"/>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_House" table="H_HOUSE_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="ID" precision="20" scale="0" />
<generator class="sequence">
<param name="sequence">H_HOUSE_XML_SEQ</param>
</generator>
</id>
<property name="position"></property>
</class>
</hibernate-mapping>
八、一對多、多對一雙向關聯
8.1 Annotation方式
8.1.1 類圖
圖8-1 類關聯關系圖
8.1.2 數據庫表結構
圖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;
}
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<House> houses = new HashSet<House>();
@Id
@Column(precision=21)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PersonGene")
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(mappedBy="person")//參考了對方的屬性名
public Set<House> getHouses() {
return houses;
}
public void setHouses(Set<House> houses) {
this.houses = houses;
}
}
8.2 XML方式
8.2.1 類圖
圖8-3 類關聯關系圖
8.2.2 數據庫表結構
圖8-4 數據庫表結構圖
8.2.3 實體類
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal;
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<XML_House> houses = new HashSet<XML_House>();
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<XML_House> getHouses() {
return houses;
}
public void setHouses(Set<XML_House> houses) {
this.houses = houses;
}
}
8.2.4 對象映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Person" table="H_PERSON_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="ID" precision="21" scale="0" />
<generator class="sequence">
<param name="sequence">H_XML_PERSON_SEQ</param>
</generator>
</id>
<property name="name"/>
<set name="houses">
<key>
<!—關聯表中指向當前類對應表的外鍵字段名,也可以<key column="PERSON_ID" /> -->
<column name="PERSON_ID" precision="21" />
</key>
<one-to-many class="XML_House"/>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_House" table="H_HOUSE_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="ID" precision="20" scale="0" />
<generator class="sequence">
<param name="sequence">H_HOUSE_XML_SEQ</param>
</generator>
</id>
<property name="position"/>
<many-to-one name="person" column="PERSON_ID"/>
<!-- 字段名與對應的XML_Person.hbm.xml中配置的set的key中column的值必須一致 -->
</class>
</hibernate-mapping>
九、多對多單向關聯
9.1 Annotation方式
9.1.1 類圖
圖9-1 類關聯關系圖
9.1.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;
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<Student> students = new HashSet<Student>();
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Teacher_Gene")
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<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
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
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Student_Gene")
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 數據庫表結構
圖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<XML_Student> students = new HashSet<XML_Student>();
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<XML_Student> getStudents() {
return students;
}
public void setStudents(Set<XML_Student> students) {
this.students = students;
}
}
package com.rongqq.hibernate3.xml.entity;
import java.math.BigDecimal;
public class XML_Student {
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;
}
}
9.2.4 對象映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Teacher" table="H_TEACHER_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="ID" precision="20" scale="0" />
<generator class="sequence">
<param name="sequence">H_TEACHER_XML_SEQ</param>
</generator>
</id>
<property name="name"/>
<set name="students" table="H_XML_T_S">
<key column="TEACHER_ID"/>
<!--中間表中指向當前類對應表的外鍵字段名為TEACHER_ID -->
<many-to-many class="XML_Student" column="SUTDNET_ID"/>
<!-- 中間表中指向XML_Student類對應表的外鍵字段名為STUDENT_ID -->
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Student" table="H_STUDENT_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="ID" precision="21" scale="0" />
<generator class="sequence">
<param name="sequence">H_XML_STUDENT_SEQ</param>
</generator>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
十、多對多雙向關聯
10.1 Annotation方式
10.1.1 類圖
圖10-1 類關聯關系圖
10.1.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;
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<Teacher> teachers = new HashSet<Teacher>();
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Student_Gene")
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<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> 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;
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<Student> students = new HashSet<Student>();
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Teacher_Gene")
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<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
10.2 XML方式
10.2.1 類圖
圖10-3 類關聯關系圖
10.2.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<XML_Student> students = new HashSet<XML_Student>();
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<XML_Student> getStudents() {
return students;
}
public void setStudents(Set<XML_Student> 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<XML_Teacher> teachers = new HashSet<XML_Teacher>();
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<XML_Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<XML_Teacher> teachers) {
this.teachers = teachers;
}
}
10.2.4 對象映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Teacher" table="H_TEACHER_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="ID" precision="20" scale="0" />
<generator class="sequence">
<param name="sequence">H_TEACHER_XML_SEQ</param>
</generator>
</id>
<property name="name"/>
<set name="students" table="H_XML_T_S">
<key column="TEACHER_ID"/>
<!-- 中間表中指向當前類對應表的外鍵字段名為TEACHER_ID -->
<many-to-many class="XML_Student" column="STUDENT_ID"/>
<!-- 中間表中指向XML_Student類對應表的外鍵字段名為STUDENT_ID -->
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rongqq.hibernate3.xml.entity">
<class name="XML_Student" table="H_STUDENT_XML" dynamic-update="true">
<id name="id" type="big_decimal">
<column name="ID" precision="21" scale="0" />
<generator class="sequence">
<param name="sequence">H_XML_STUDENT_SEQ</param>
</generator>
</id>
<property name="name"/>
<set name="teachers" table="H_XML_T_S">
<!-- 相關聯的類的映射文件兩側定義的中間表名字必須一致 -->
<key column="STUDENT_ID" />
<!-- 中間表中指向當前類對應表的外鍵字段名 -->
<many-to-many class="XML_Teacher" column="TEACHER_ID" />
<!-- 中間表中指向與當前類關聯的另外一個類所對應表的外鍵字段名 -->
</set>
</class>
</hibernate-mapping>