組件(Component)映射多用來(lái)表示對(duì)象的從屬關(guān)系(組合,聚合).比如一個(gè)學(xué)生可能有姓名,年齡,性別,成績(jī)等屬性,其中成績(jī)是另一個(gè)對(duì)象,又有科目,分?jǐn)?shù)屬性,這里就需要用組件映射來(lái)表是之間的關(guān)系.
Java代碼:
// 學(xué)生

class Student
{
private String name;
private int age;
private String sex;
private Grade grade;



}
// 成績(jī)

class Grade
{
private String subject;
private float score;



}
數(shù)據(jù)庫(kù):
-- 學(xué)生表
create table STUDENT (
ID char(32) not null,
NAME varchar(16) not null,
SEX char(1),
AGE integer,
primary key (ID)
);

-- 成績(jī)表
create table GRADE (
ID char(32) not null,
student_id char(32) not null,
SUBJECT varchar(10),
SCORE float,
primary key (ID),
foreign key (student_id)
); Hibernate映射文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="Student" table="STUDENT">

<id name="id" type="string" unsaved-value="null">
<column name="ID" sql-type="char(32)"/>
<generator class="uuid.hex"/>
</id>
<property name="name" type="string" not-null="true">
<column name="NAME" length="16" not-null="true"/>
</property>
<property name="sex" type="char" column="SEX"/>
<property name="age" type="int" column="AGE"/>
<component name="grade" class="Grade">
<property name="subject" type="string" column="SUBJECT" not-null="true"/>
<property name="score" type="float" column="SCORE" not-null="true"/>
</component>
</class>
</hibernate-mapping>