文档章节

Hibernate的映射组成关系

jj_soft
 jj_soft
发布于 2016/06/04 15:24
字数 588
阅读 12
收藏 0

建立域模型(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>

这样就可以把多个持久化的类指定为一个表,

 

    

© 著作权归作者所有

jj_soft
粉丝 1
博文 96
码字总数 74097
作品 0
广州
程序员
私信 提问
『Hibernate』基础入门知识

学习java开发肯定要进行框架的学习,框架可以提高开发效率,因为其封装了许多经常被复用的代码,并且框架提供的软件结构能使软件开发更加清晰。 什么是Hibernate? 说Hibernate之前先要介绍一...

dejunz
2016/11/01
0
0
Hibernate映射的基本操作

Hibernate映射主要是通过对象关系映射文件实现,对象关系映射文件把数据库中的实体(一般为二维表)映射到面向对象中的实体对象,把数据库中多个表之间的相互关系也反映到映射好的类中。以后,...

coldg
2012/08/01
104
0
Hibernate杂问

1 谈谈你对ORM框架的基本思想的了解? 首先 ORM是 对象关系映射,是为了解决类似于JDBC实现对象持久化的问题开发的。 框架的基本特征:完成面向对象的编程语言到关系数据库之间的映射。 他的...

陈嘻嘻哈哈
2015/12/18
0
0
企业应用架构模式学习(十三):对象-关系元数据映射模式

元数据映射(Metadata Mapping) 在元数据中保持关系-对象映射的详细信息。 元数据即表示数据的数据,这里指的是对象的域和数据库中的域对应的关系。 运行机制 使用元数据映射最主要的决策是...

大风起兮
2013/06/04
196
0
hibernate 的 关系映射 比较复杂 , 项目开发时不使用hibernate的关系映射, 好吗?

hibernate 的 关系映射 比较复杂 , 项目开发时不使用hibernate的关系映射, 好吗? 开发的时候只使用hibernate的对 jdbc 的封装,不是用hibernate的关系映射,表之间的关联关系,都交给数据库, 这...

北漂的我
2014/12/03
2K
8

没有更多内容

加载失败,请刷新页面

加载更多

springboot 403 问题

添加WebAppConfigurer 配置 @Configuration@EnableAutoConfigurationpublic class WebAppConfigurer extends WebMvcConfigurerAdapter { public WebAppConfigurer() { } ......

布袋和尚_爱吃鱼
30分钟前
4
0
Python自动更换壁纸爬虫与tkinter结合

直接上代码 import ctypesimport timeimport requestsimport osfrom threading import Threadfrom tkinter import Tk, Label, Button,Entry,StringVar,messagebox# '放到AppData\Roami......

物种起源-达尔文
30分钟前
3
0
Postgresql Study 笔记

Postgresql 安装 Windows, MAC Install Postgresql 下载地址: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Linux Install sudo apt-get update sudo apt-get in......

slagga
32分钟前
4
0
layer.open 打开新页面传参问题

如图所示,点击出售,把A页面的数据传到弹框上面,因为弹框比较复杂,所以使用引入一个新页面。 A.html a.js B.html b.js 1、第一种方案 sellInte: function (){ var obj = document.g...

木九天
35分钟前
4
0
沙龙报名 | 区块链数据服务技术应用实践

京东云是国内首家提供区块链数据在线分析服务产品的公司,也是行业内首家对区块链数据服务进行开源的公司。 本次沙龙是京东云BDS开源后,首次在深圳举办线下沙龙,我们将邀请京东云BDS团队核...

京东云技术新知
36分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部