組件映射,反映在編程模型中對應的是兩個類,但是在數據庫中一般對應一張表。比如我們有兩個類Husband和Wife,但是我們如果將Wife作爲Husband的一個組件,那麼雖然在程序中對應的是兩個類,但是數據庫中只對應一個Husband表。
代碼如下所示:
1:Annotation方式:
Wife.java:(由於wife現在是作爲Husband的組件出現在Husband中,所以wife不應再有id主鍵!!)
public class Wife {
private String wifename;
private int age;
public String getWifename() {
return wifename;
}
public void setWifename(String wifename) {
this.wifename = wifename;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Husband.java:
@Entity
public class Husband {
private int id;
private String name;
private Wife wife;
@Id
@GeneratedValue
public int getId() {
return id;
}
@Embedded
public Wife getWife() {
return wife;
}
public void setWife(Wife wife) {
this.wife = wife;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Husband中我們使用了@Embedded來標識wife是作爲一個組件嵌入到husband中的。測試生成的建表語句如下:
09:54:03,797 DEBUG SchemaExport:377 -
create table Husband (
id integer not null auto_increment,
name varchar(255),
age integer not null,
wifename varchar(255),
primary key (id)
)
09:54:03,886 INFO SchemaExport:268 - schema export complete
2:XML方式:
此種方式,只有Husband一個XML文件,而且運行結果完全相同,代碼如下:
<hibernate-mapping package="com.zxb.model">
<class name="Husband" table="husband">
<id name="id" column="id">
<generator class="native">
</generator>
</id>
<property name="name" column="name" />
<component name="wife">
<property name="wifename"></property>
<property name="age"></property>
</component>
</class>
</hibernate-mapping>