Hibernate读书笔记-----Hibernate的关联映射之组件属性关联关系
先看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>
操作类如下:
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 企业应用实战》