zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    URAL 2046 A
    URAL 2056 Scholarship 水题
    Codeforces Gym 100286I iSharp 水题
    Codeforces Gym H. Hell on the Markets 贪心
    Codeforces Gym 100286G Giant Screen 水题
    Codeforces Gym 100286B Blind Walk DFS
    Codeforces Gym 100286F Problem F. Fibonacci System 数位DP
    Codeforces Gym 100286A. Aerodynamics 计算几何 求二维凸包面积
    Codeforces Gym 100418K Cards 暴力打表
    Codeforces Gym 100418J Lucky tickets 数位DP
  • 原文地址:https://www.cnblogs.com/chenssy/p/2594879.html
Copyright © 2011-2022 走看看