`
esffor
  • 浏览: 1367495 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate继承映射--每个类一个数据表的实现案例

阅读更多

首先,我们有如下实体关系,Container,Box,Bottle,Container是Box和Bottle的父类

数据库结构如下:
其中hibernate_unique_key表为hibernate主键生成策略的hilo高低位算法使用

CREATE TABLE `box1` (
  `id` 
varchar(50NOT NULL default '0',
  `size` 
double default NULL,
  `name` 
varchar(50default NULL,
  `description` 
varchar(50default NULL,
  `width` 
double default NULL,
  `height` 
double default NULL,
  `
lendouble default NULL,
  
PRIMARY KEY  (`id`)
) ENGINE
=InnoDB DEFAULT CHARSET=gb2312;

CREATE TABLE `container1` (
  `id` 
varchar(50NOT NULL default '0',
  `size` 
double default NULL,
  `name` 
varchar(50default NULL,
  `description` 
varchar(50default NULL,
  
PRIMARY KEY  (`id`)
) ENGINE
=InnoDB DEFAULT CHARSET=gb2312;

CREATE TABLE `bottle1` (
  `id` 
varchar(50NOT NULL default '0',
  `size` 
double default NULL,
  `name` 
varchar(20default NULL,
  `diameter` 
double default NULL,
  `height` 
double default NULL,
  `description` 
varchar(50default NULL,
  
PRIMARY KEY  (`id`)
) ENGINE
=InnoDB DEFAULT CHARSET=gb2312;

CREATE TABLE `hibernate_unique_key` (
  `next_hi` 
int(11NOT NULL default '0',
  
PRIMARY KEY  (`next_hi`)
) ENGINE
=InnoDB DEFAULT CHARSET=gb2312;

 

实体定义如下:

package extendstestone;
//hibernate多态支持的策略,每个子类一张表
public abstract class Container ...{
  
private String containerId;
  
private double size;
  
private String name;
  
private String description;
public String getContainerId() ...{
    
return containerId;
}

public void setContainerId(String containerId) ...{
    
this.containerId = containerId;
}

public String getDescription() ...{
    
return description;
}

public void setDescription(String description) ...{
    
this.description = description;
}

public String getName() ...{
    
return name;
}

public void setName(String name) ...{
    
this.name = name;
}

public double getSize() ...{
    
return size;
}

public void setSize(double size) ...{
    
this.size = size;
}

}



package extendstestone;

public class Box extends Container ...{
    
private double height;
    
private double length;
    
private double width;
    
public double getHeight() ...{
        
return height;
    }

    
public void setHeight(double height) ...{
        
this.height = height;
    }

    
public double getLength() ...{
        
return length;
    }

    
public void setLength(double length) ...{
        
this.length = length;
    }

    
public double getWidth() ...{
        
return width;
    }

    
public void setWidth(double width) ...{
        
this.width = width;
    }

}



package extendstestone;

public class Bottle extends Container ...{
  
private double diameter;
  
private double height;
public double getDiameter() ...{
    
return diameter;
}

public void setDiameter(double diameter) ...{
    
this.diameter = diameter;
}

public double getHeight() ...{
    
return height;
}

public void setHeight(double height) ...{
    
this.height = height;
}

}

 配置文件:

<?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"
>
<!-- 
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping package="extendstestone">
    
<class name="Container" table="container1">
       
<id name="containerId" column="id">
         
<generator class="uuid.hex"></generator>
       
</id>
       
<property name="size" column="size"></property>
       
<property name="name" column="name"></property>
       
<property name="description" column="description"></property>
       
<joined-subclass name="extendstestone.Box" table="box1">
          
<key column="id"></key>
          
<property name="height" column="height"></property>
          
<property name="width" column="width"></property>
          
<property name="length" column="len"></property>
       
</joined-subclass>
         
<joined-subclass name="extendstestone.Bottle" table="bottle1">
          
<key column="id"></key>
          
<property 
分享到:
评论

相关推荐

    hibernate-release-4.3.8.Final

    在Hibernate中,每个Java类可以映射为一个数据库表,类的实例对应表中的行。通过注解或XML配置,我们可以定义字段与列的映射,以及主键生成策略等。 四、缓存机制 Hibernate 4.3.8.Final引入了第二级缓存,它可以跨...

    J2EE Hibernate-7.ppt

    - **每个具体类对应一个表**:这种方法不保留继承层次,每个子类在数据库中都有独立的表,但失去了继承的多态性。 - **根类对应一个表**:所有子类的信息都存储在一个表中,通过一个额外的字段来区分不同子类,这...

    hibernate4.1中文api

    - **表每个类层次**: 每个继承树使用一个表。 - **表每个子类**: 每个子类使用一个表。 - **表每个子类:使用一个鉴别器**: 结合多个策略。 - **每个类层次混合表与表每个子类**: 混合使用不同策略。 - **每个...

    hibernate应用[包括示例,映射,主键自增,各种查询操作方式以及配置文档以及 Annotation示例]

    - **Hiberante的对象继承关系之--TPC一个类一张表.doc**:讲述Hibernate处理对象继承和多表映射的方法。 - **hibernate 非主键自增.doc**:关于非主键字段如何实现自动增长的策略。 - **Struts和Hibernate之间搭起...

    SHH 框架 继承 说明 案例

    例如,你可以定义一个通用的数据访问对象(DAO)父Bean,然后为每个特定的数据表创建一个继承自该父Bean的子Bean,这样就可以共享通用的配置并定制特定的功能。 接下来,我们讨论Hibernate框架中的继承。在...

    BONC_Hibernate

    - **第一部分**:介绍了如何创建第一个Hibernate应用程序,包括设置环境、编写实体类、创建映射文件等步骤。 - **设置**:配置Hibernate所需的环境和依赖库。 - **第一个class**:创建一个简单的Java类作为持久化...

    Java.Persistence.with.Hibernate.pdf

    - **继承映射**:支持不同类型的继承关系,包括单表继承、类表继承和联合表继承。 - **多租户支持**:允许在同一数据库中为不同用户提供隔离的存储空间。 - **跨库数据同步**:实现在多个数据库之间同步数据,适用于...

    spring分别与jdbc和hibernate结合的事务控制--案例

    Hibernate是一个流行的ORM(对象关系映射)框架,它允许开发者使用Java对象来操作数据库,而无需编写SQL语句。在Spring中,我们可以使用HibernateTemplate或SessionFactoryBean来配置和管理Hibernate。同样,Spring...

    hibernate技术研究对比总结

    JPA 规范提供了一种标准的方式来处理对象关系,Hibernate 是 JPA 的一个实现。 2.4 **OMP中的对象关系** 此处可能是笔误,应为 ORM 中的对象关系,ORM 解决了传统 JDBC 编程中数据层与业务层之间的耦合问题。 2.5 ...

    J2EE电子商务系统开发从入门到精通:基于Struts和Hibernate技术实现

    - **分页显示的实现**:通过SQL查询或Hibernate API实现数据分页。 #### 企业在线信息系统网站概述与架构设计 - **概述**: - 该网站旨在为企业的日常运营提供一个综合的信息管理系统。 - 包括员工登录、人事...

    spring Spring MVC Hibernate 4.x 整合案例

    完成这些步骤后,下载并运行这个案例,你将看到一个功能完备的Web应用,它展示了Spring、Spring MVC和Hibernate的完美融合。 总的来说,这个整合案例涵盖了Java Web开发的核心技术,对于初学者来说,它是理解和掌握...

    15 继承(二)(每个子类扩展的属性单独保存在一张表中)

    标题中的“15 继承(二)(每个子类扩展的属性单独保存在一张表中)”指的是在数据库设计中,特别是在使用对象关系映射(ORM)框架如Hibernate时,处理继承关系的一种策略——单表继承(Single Table Inheritance,STI)...

    hibernate_reference.pdf

    - **映射文件**:每个实体类都需要有一个对应的映射文件(`.hbm.xml`),用于定义实体类与数据库表之间的映射关系。 #### 六、映射策略详解 - **一对一映射**:可以采用外键或主键的方式实现两个表之间的一对一...

    Hibernate开发中文教程

    - **继承映射**: 支持单表继承、表每类继承和表每子类继承等多种继承策略。 - **批量更新与删除**: 提供了批量处理操作的能力,以提高数据处理效率。 - **多数据库支持**: 可以同时与多个不同类型的数据库进行交互。...

    将对象映射到关系数据库

    3. **每个类单独映射到一张表**(Class Table Inheritance,CTI):基类和每个子类都有自己的表,基类表存储所有共有的属性,子类表存储额外的属性。 4. **将类映射为一个通用的表结构**:设计一种通用的表结构来...

    hibernate+struts 2+spring 全注解案例

    在学习这个案例时,你可以逐步分析每个组件的注解,了解它们如何协同工作,以及如何通过注解实现松耦合和高内聚的设计原则。这不仅有助于加深对SSH框架的理解,也有利于你在实际项目中灵活运用这些技术。

    完整的Struts2+Spring2+Hibernate3增删查案例

    总的来说,这个案例是一个实用的学习资源,通过它你可以理解三个框架的集成方式,以及如何在实际项目中使用它们实现数据操作。学习和掌握这些技术,将有助于提升你在Java Web开发领域的专业技能。

Global site tag (gtag.js) - Google Analytics