• 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 }
  • 相关阅读:
    民5需求水平
    Codeforces Beta Round #3 A. Shortest path of the king
    UFLDL接听教程练习(来自编码器和矢量编程疏)
    与我一起extjs5(09--其定义菜单2)
    C++ 堆 和 堆 分析
    Spark Executor Driver资源调度汇总
    通知中心
    Objective-c正确的写法单身
    OpenCV视频播放方法
    设备11g_rac配置对等
  • 原文地址:https://www.cnblogs.com/chenssy/p/2594879.html
Copyright © 2020-2023  润新知