先看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
操作类如下:
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(); }}
读李刚《轻量级Java EE 企业应用实战》