先看User持久化类:
public class Users { private int id; private Date birthday; private Name name; public int getId() { return id; } public void setId(int id) { this.id = id; } public Date getBirthday() { return birthday; } public void setBirthday(Date birhday) { this.birthday = birhday; } public Name getName() { return name; } public void setName(Name name) { this.name = name; } }
从User持久化类中可以看到name不再是一个简单的String,而是一个类。在这里name就是一个组件属性,在name类中可以包含基本数据类型、字符型、日期型甚至是组件和关联实体。从User持久化类中我们看不出name是关联实体还是普通的组件属性。但是如果我们将Name映射成持久化实体,那么Name就是关联实体,如果不映射成持久化类,那么就是组件属性。这里我们不将Name映射成持久化类。
Name类如下:
public class Name { private String firstName; private String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }为了映射User类中的Name组件,映射文件中使用<component.../>元素来映射该主键元素。映射文件如下:
User.hbm.xml
<hibernate-mapping package="com.hibernate.domain"> <class name="Users"> <id name="id"> <generator class="native" /> </id> <property name="birthday" /> <!-- 映射组件元素 --> <component name="name"> <!-- 映射组件的name属性指向包含实体 --> <property name="firstName" column="first_name"/> <property name="lastName" column="last_name"/> </component> </class> </hibernate-mapping>
操作类如下:
读李刚《轻量级JavaEE 企业应用实战》