zoukankan      html  css  js  c++  java
  • hibernate 映射组成关系

    建立域模型和关系数据模型有着不同的出发点:

    • 域模型: 由程序代码组成, 通过细化持久化类的的粒度可提高代码的可重用性, 简化编程

    • 在没有数据冗余的情况下, 应该尽可能降低表的数目, 简化表之间的參照关系, 以便提高数据的訪问速度

    Hibernate 把持久化类的属性分为两种:
    • 值(value)类型: 没有 OID, 不能被单独持久化, 生命周期依赖于所属的持久化类的对象的生命周期
    • 实体(entity)类型: 有 OID, 能够被单独持久化, 有独立的生命周期(假设实体类型包括值类型,这个值类型就是一个组件,尽管是由两个类,不同在数据库中用同一张数据库表表示)

    显然无法直接用 property 映射 pay 属性

    Hibernate 使用 <component> 元素来映射组成关系, 该元素表名 pay 属性是 Worker 类一个组成部分, 在 Hibernate 中称之为组件


    component



    Worker.java
    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.hbm.xml
    <?

    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"> <!-- 指定组成关系的组件的属性 --> <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>


    Pay.java
    package com.atguigu.hibernate.entities;
    
    public class Pay {
    	
    	private int monthlyPay;
    	private int yearPay;
    	private int vocationWithPay;
    
    	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;
    	}
    }
    

    parent属性:
    这里在组件中引用了父类private Worker worker;
    Pay.java
    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;
    	}
    }
    
    Worker.java
    <?

    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>



  • 相关阅读:
    python中datetime的使用方法
    apple for liudanping
    fiddle教程收藏
    idea下maven project dependencies 有红线
    win7,下安装mysql如何初始化
    使用idea练习springmvc时,出现404错误总结
    spring拦截器
    spring 学习总结
    eclipse 中maven项目的运行
    Java对象new,到赋null过程的总结
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7237718.html
Copyright © 2011-2022 走看看