Hibernate的映射组成关系
建立域模型(Java的对象模型)和关系数据模型(数据库表模型)有着不同的出发点: 
  域模型: 由程序代码组成, 通过细化持久化类的的粒度(就是通过把相同的属性,规划为一个类)可提高代码的可重用性, 简化编程
  关系模型:在没有数据冗余的情况下, 应该尽可能减少表的数目, 简化表之间的参照关系, 以便提高数据的访问速度
Hibernate 把持久化类的属性分为两种: 
    值(value)类型: 没有 OID, 不能被单独持久化, 生命周期依赖于所属的持久化类的对象的生命周期 
    实体(entity)类型: 有 OID, 可以被单独持久化, 有独立的生命周期 显然无法直接用 property 映射实体类属性 
    Hibernate 使用 <component> 元素来映射组成关系(就是可能多个持久类组成一个表), 该元素表名 pay 属性是 Worker 类一个组成    部分, 在 Hibernate 中称之为组件
Example:
  新建一个worker类:
package com.atguigu.hibernate.entities;
public class Worker {
    private Integer id;
    private String name;
    private Pay pay;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Pay getPay() {
        return pay;
    }
    public void setPay(Pay pay) {
        this.pay = pay;
    }
}
而worker类又包含了一个pay类:
package com.atguigu.hibernate.entities;
public class Pay {
    private int monthlyPay;
    private int yearPay;
    private int vocationWithPay;
    private Worker worker;
    public Worker getWorker() {
        return worker;
    }
    public void setWorker(Worker worker) {
        this.worker = worker;
    }
    public int getMonthlyPay() {
        return monthlyPay;
    }
    public void setMonthlyPay(int monthlyPay) {
        this.monthlyPay = monthlyPay;
    }
    public int getYearPay() {
        return yearPay;
    }
    public void setYearPay(int yearPay) {
        this.yearPay = yearPay;
    }
    public int getVocationWithPay() {
        return vocationWithPay;
    }
    public void setVocationWithPay(int vocationWithPay) {
        this.vocationWithPay = vocationWithPay;
    }
}
问题就来了,如何把这两个类同时放在一个表里面呢???
可以通过.hbm.xml文件来配置
我们可以使用<component>标签来指定一个类中包含的类
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2014-1-2 16:14:33 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping package="com.atguigu.hibernate.entities">
<class name="Worker" table="WORKER">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property> <!-- 映射组成关系 -->
<component name="pay" class="Pay">
<parent name="worker"/>
<!-- 指定组成关系的组件的属性 -->
<property name="monthlyPay" column="MONTHLY_PAY"></property>
<property name="yearPay" column="YEAR_PAY"></property>
<property name="vocationWithPay" column="VOCATION_WITH_PAY"></property>
</component> </class>
</hibernate-mapping>
这样就可以把多个持久化的类指定为一个表,
Hibernate的映射组成关系的更多相关文章
- 【hibernate】映射继承关系
		
[hibernate]映射继承关系 转载:https://www.cnblogs.com/yangchongxing/p/10405151.html ========================= ...
 - Hibernate关联映射关系
		
Hibernate关联映射关系 一.双向一对多关联映射关系:当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象(一对多双向关联和多对一双向关联是完全一样的) 1.1创建实 ...
 - [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的  映射 (了解),映射组成关系
		
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
 - Hibernate执行流程和关系映射
		
一.Hibernate的执行流程 hibernate作为一个ORM框架,它封装了大量数据库底层的sql语句操作的方法,这样在执行hibernate的过程中理解hibernate的执行流程很有必要. 由 ...
 - 【hibernate 初探】之 关系映射,ORM
		
从整理上讲,一个ORM框架(以hibernate为例)所涉及内容无非就是,如何映射,如何检索,还有事务处理.所以从这三方面入手,基本上可以保证将hibernate可以用到自己的项目之中.所以我先说一下 ...
 - hibernate 映射组成关系
		
建立域模型和关系数据模型有着不同的出发点: 域模型: 由程序代码组成, 通过细化持久化类的的粒度可提高代码的可重用性, 简化编程 在没有数据冗余的情况下, 应该尽可能降低表的数目, 简化表之间的參照关 ...
 - Hibernate One-to-One Mappings 一对一关系映射
		
Hibernate One-to-One Mappings 一对一关系映射 关键:一对一关系映射和多对一关系映射非常像.仅仅是unique 属性值为 true 样例:一个员工仅仅能有一个地址. Hib ...
 - (转)Hibernate关联映射——对象的三种关系
		
http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射——对象的三种关系 Hibernate框架基于ORM设 ...
 - (Hibernate进阶)Hibernate基本映射(三)
		
介绍Hibernate的经典内容:对象关系映射.主要介绍映射的基本概念,映射的分类,映射文件. 概念 ORM(Object Relational Mapping),即对象关系映射.它的作用就是在关系型 ...
 
随机推荐
- Selenium  之18 种定位方式
			
1 id 定位 driver.find_element_by_id() HTML 规定id 属性在HTML 文档中必须是唯一的.这类似于公民的身份证号,具有很强的唯一性 from selenium i ...
 - 0077 web.xml中配置Spring MVC时,Servlet-name上报Servlet should have a mapping的错误
			
这次是手工建立的web工程目录,在配置webapp/WEB-INF/web.xml的Spring MVC的DispatcherServlet时,在servlet-name上报错:Servlet sho ...
 - win32之全屏窗口
			
游戏开发中经常使用会让游戏以全屏窗口的状态运行,下面一个例子就是来实现这个效果的. #include <windows.h> void RegisterMyClass(); LRESULT ...
 - 关于液晶显示器的6bit面板、8bit面板及E-IPS(转)
			
原文:http://bbs.3dmgame.com/thread-2232447-1-1.html 1.什么是6bit面板.8bit面板 众所周知,液晶显示器 ...
 - swift基础知识
			
let 声明常量var 声明变量 ?可以为空 !必须为所声明类型 swift中文教程:http://c.biancheng.net/cpp/swift/jiaocheng/
 - 一款基于jQuery外观优雅带遮罩弹出层对话框
			
今天我们要来分享一款基于jQuery的弹出层对话框插件,该插件包含多种对话框类型,比如提示框.确认框等.更为实用的是,这款jQuery对话框中的按钮事件也可以被我们所捕获,从而相应对话框按钮的各种事件 ...
 - sparksql 操作hive
			
写在前面:hive的版本是1.2.1spark的版本是1.6.x http://spark.apache.org/docs/1.6.1/sql-programming-guide.html#hive- ...
 - linux  udhcpc 后无法自动设置网卡ip
			
arm 主板用 udhcpc 获取租赁的空闲的ip后,并没有直接设置在网卡上. 查了一下相关原因,是因为虽然已经获取了ip, 但是并没有通过脚本去设置这个IP. 在 busybox 里面有相关的脚本要 ...
 - [WDT]内部看门狗和外部看门狗
			
1. 芯片内部看门狗 内部看门狗通常为芯片内部某个特殊定时器,用户可以通过手动初始化.设置timeout.使能.失能该看门狗,然后在线程中定时去喂狗,从而达到检测应用程序跑飞.跑死的情况. 在Linu ...
 - 程序中判断android系统版本
			
public static int getAndroidSDKVersion() { int version; try { version = Integer.valueOf(android.os.B ...