组件映射,反映在编程模型中对应的是两个类,但是在数据库中一般对应一张表。比如我们有两个类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>