先看User持久化類:
[java]
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類如下:
[java]
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
[html]
<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>
操作類如下:
[java]
public class UserManager {
public static void main(String[] args) {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
Users users = new Users();
users.setBirthday(new Date());
Name name = new Name();
name.setFirstName("first name");
name.setLastName("last name");
users.setName(name);
session.save(users);
tx.commit();
session.close();
}
}
作者:chenssy