hibernate学习之第八篇

news/2024/12/26 18:12:22

组件映射

关联的属性是个复杂类型的持久化类,但不是实体即:数据库中没有表与该属性对应,但该类的属性要持久保存的。

对于单表的对象细分,在hibernate中可借助Component节点的定义完成。
何谓Component?从名字上来看,既然称之为组件,则其必然是从属于某个整体的一个组成部分。在hibernate语义中,我们将某个实体对象中的一个逻辑 组成成为Component。

component与实体对象的根本差别,就在于Component没有标识,它作为一个逻辑组成,完全从属于实体对象。
示例:

 <component name="userName">
            <property name="firstName" column="first_name"></property>
            <property name="lastName" column="last_name"></property>
 </component>

 

user类代码如下:

public class User{

    private int id;
    private Name userName;
    private Date birthday;

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Name getUserName() {
        return userName;
    }

    public void setUserName(Name userName) {
        this.userName = userName;
    }
}

 

Name类源代码如下:

package hibernatetest;

public class Name {
private String firstName;

    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;
    }
    private String lastName;
}

 

user.hbm.xml配置信息如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="hibernatetest">
    <class name="User" table="`user`">
        <id name="id">
            <generator class="hilo"/>
        </id>
        <component name="userName">
            <property name="firstName" column="first_name"></property>
            <property name="lastName" column="last_name"></property>
        </component>

        <property name="birthday"/>
    </class>
</hibernate-mapping>
不需要对name类单独的写映射文件,直接包含到了user映射文件中去。

对象中的属性比较复杂,可以将其独立出来处理。
1,可以用两张表来实现一对一的映射。
2,如果想把信息保存到同一张表中,则可以使用component。


当组件的属性不能和表中的字段简单对应的时候可以选择使用用户自定义类型org.hibernate.usertype.UserType或org.hibernate.usertype.CompositeUserType


http://www.niftyadmin.cn/n/2864065.html

相关文章

hibernate学习之第九篇

hibernate中的集合类型 引入&#xff1a; Hibernate可以持久化以下java集合的实例, 包括java.util.Map, java.util.Set, java.util.SortedMap, java.util.SortedSet, java.util.List, 和任何持久实体或值的数组。类型为java.util.Collection或者java.util.List的属性还可以使用…

Redis——集群方案之redis cluster的搭建部署

一.redis的集群之redis cluster的概念 对于Redis集群方案有好多种&#xff0c;基本常用的就是twemproxy&#xff0c;codis&#xff0c;redis cluster这三种解决方案。 本文介绍redis cluster。 上篇博文实现redis的高可用&#xff0c;针对的主要是master宕机的情况&#xff…

hibernate学习之第十篇

级联和关系维护 Cascade 用来说明当对主对象进行某种操作时&#xff0c;是否对其关联的从对象也作类似的操作&#xff0c;常用的cascade&#xff1a;none,all,save-update,delete,lock,refresh,evict,replicate,persist,merge,delete-orphan(one-to-many).一般对many-to-many&…

Redis——基于lamp架构做mysql的缓存服务器和配置gearman实现数据同步

一.前言 对一个关系型数据库进行调优以获得高查询性能可能会比较困难。如果对数据模型优化和对查询调优不起作用&#xff0c;DBA就可以使用缓存系统&#xff0c;比如Redis&#xff0c;它是一个可以提供内存和永久数据存储的键值数据存储系统。 由于Redis能够将数据快速读写至…

hibernate学习之第十一篇(1)

hibernate的继承映射 《一》一张表映射一棵继承树 使用discriminator&#xff08;鉴别标志&#xff09; 类Worker和Farmer都继承自Person 类Person的源代码如下&#xff1a; package hibernate.extend; public class Person { private int id; private String name; private…

Redis——redis集群方案之codis集群的搭建部署

一.什么是codis集群 codis集群简介 Codis是一个分布式的Redis解决方案&#xff0c;对于上层的应用来说&#xff0c;连接Codis Proxy和连接原生的Redis Server没有明显的区别&#xff08;不支持的命令列表&#xff09;&#xff0c;上层应用可以像使用单机的Redis一样使用&#…

hibernate学习之第十一篇(2)

《二》每个子类映射到一张表&#xff08;joined-subclass&#xff09; 配置文件修改为&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" &qu…

MFS——分布式文件系统的安装与部署

一.什么是MFS MFS简介 分布式文件系统是指文件系统管理的物理存储资源通过计算机网络与各节点相连。简单讲&#xff0c;就是把一些分散的共享文件夹&#xff0c;集合到一个文件夹内。对于用户来说&#xff0c;只需要打开该虚拟文件夹&#xff0c;就可以使用这些分散的文件夹进…