• 022 component(组件)关联映射


    Component关联映射:

    目前有两个类如下:

    值对象没有标识,而实体对象具有标识,值对象属于某一个实体,使用它重复使用率提升,而且更清析。

    以上关系的映射称为component(组件)关联映射

    在hibernate中,component是某个实体的逻辑组成部分,它与实体的根本区别是没有oid,component可以成为是值对象(DDD)。

    采用component映射的好处:它实现了对象模型的细粒度划分,层次会更加分明,复用率会更高。

    User实体类:

    public class User {
    
        private int id;
        private String name;   
        private Contact contact;//值对象的引用   
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Contact getContact() {
            return contact;
        }
        public void setContact(Contact contact) {
            this.contact = contact;
        }  
    }

    Contact值对象:

    public class Contact {
    
        private String email;  
        private String address;
        private String zipCode;
        private String contactTel;
    
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public String getZipCode() {
            return zipCode;
        }
        public void setZipCode(String zipCode) {
            this.zipCode = zipCode;
        }
        public String getContactTel() {
            return contactTel;
        }
       public void setContactTel(String contactTel) {
            this.contactTel = contactTel;
        }  
    }

    User映射文件(组件映射):

    <hibernate-mapping>
        <class name="com.wjt276.hibernate.User" table="t_user">
            <id name="id" column="id">
                <generator class="native"/>
            </id>
            <property name="name" column="name"/>
            <!-- <component>标签用于映射Component(组件)关系
                其内部属性正常映射。
             -->
            <component name="contact">
                <property name="email"/>
                <property name="address"/>
                <property name="zipCode"/>
                <property name="contactTel"/>          
            </component>
    
        </class>
    </hibernate-mapping>

    Contact类是值对象,不是实体对象,是属于实体类的某一部分,因此没有映射文件

    导出数据库输出SQL语句:

    create table t_user (id integer not null auto_increment, name varchar(255), email varchar(255), address varchar(255), zipCode varchar(255), contactTel varchar(255), primary key (id))

    数据表结构:

    注:虽然实体类没有基本联系信息,只是有一个引用,但在映射数据库时全部都映射进来了。以后值对象可以重复使用,只要在相应的实体类中加入一个引用即可。

    组件映射数据保存:

    session = HibernateUtils.getSession();
    
                tx = session.beginTransaction();
                User user = new User();
                user.setName("10");
           
                Contact contact = new Contact();
                contact.setEmail("wjt276");
                contact.setAddress("aksdfj");
                contact.setZipCode("230051");
                contact.setContactTel("3464661");
             
                user.setContact(contact);
                session.save(user);          
                tx.commit();

    实体类中引用值对象时,不用先保存值对象,因为它不是实体类,它只是一个附属类,而session.save()中保存的对象是实体类。

    什么是实体类:

    就是普通的Java类加上一个映射文件,两者构成一个实体类,才可以被session保存、更新等操作。

  • 相关阅读:
    公钥基础设施PKI 简介
    密码库LibTomcrypt的内容介绍及分析
    trace
    winform(C#)拖拽实现获得文件路径
    无线网络技术
    设备控制选项的部分列表
    dll #pragma data_seg注意事项
    RFC
    奥运火炬传递路线
    WMIC命令大全
  • 原文地址:https://www.cnblogs.com/crazylqy/p/4080511.html
Copyright © 2020-2023  润新知