Hibernate读书笔记-----Hibernate的关联映射之组件属性关联关系

          先看User持久化类:

 1 public class Users {
 2     private int id;
 3     private Date birthday;
 4     private Name name;
 5 
 6     public int getId() {
 7         return id;
 8     }
 9 
10     public void setId(int id) {
11         this.id = id;
12     }
13 
14     public Date getBirthday() {
15         return birthday;
16     }
17 
18     public void setBirthday(Date birhday) {
19         this.birthday = birhday;
20     }
21 
22     public Name getName() {
23         return name;
24     }
25 
26     public void setName(Name name) {
27         this.name = name;
28     }
29 
30 }

 


          User持久化类中可以看到name不再是一个简单的String,而是一个类。在这里name就是一个组件属性,在name类中可以包含基本数据类型、字符型、日期型甚至是组件和关联实体。从User持久化类中我们看不出name是关联实体还是普通的组件属性。但是如果我们将Name映射成持久化实体,那么Name就是关联实体,如果不映射成持久化类,那么就是组件属性。这里我们不将Name映射成持久化类。

          Name类如下:

 

 1 public class Name {
 2     private String firstName;
 3     private String lastName;
 4 
 5     public String getFirstName() {
 6         return firstName;
 7     }
 8 
 9     public void setFirstName(String firstName) {
10         this.firstName = firstName;
11     }
12 
13     public String getLastName() {
14         return lastName;
15     }
16 
17     public void setLastName(String lastName) {
18         this.lastName = lastName;
19     }
20 
21 }

 

 

        为了映射User类中的Name组件,映射文件中使用<component.../>元素来映射该主键元素。映射文件如下:

          User.hbm.xml

 1 <hibernate-mapping package="com.hibernate.domain">
 2     <class name="Users">
 3         <id name="id">
 4             <generator class="native" />
 5         </id>
 6 
 7         <property name="birthday" />
 8         
 9         <!-- 映射组件元素 -->
10         <component name="name">
11             <!-- 映射组件的name属性指向包含实体 -->
12             <property name="firstName" column="first_name"/>
13             <property name="lastName" column="last_name"/>
14         </component>
15     </class>
16 </hibernate-mapping>

          操作类如下:

 1 public class UserManager {
 2 
 3     public static void main(String[] args) {
 4         Session session = HibernateUtil.getSession();
 5         Transaction tx = session.beginTransaction();
 6         
 7         Users users = new Users();
 8         users.setBirthday(new Date());
 9         Name name = new Name();
10         
11         name.setFirstName("first name");
12         name.setLastName("last name");
13         users.setName(name);
14         
15         session.save(users);
16         tx.commit();
17         session.close();
18     }
19 
20 }

 

 

posted @ 2012-07-17 11:00  chenssy  阅读(338)  评论(0编辑  收藏  举报