首先,我们有如下实体关系,Container,Box,Bottle,Container是Box和Bottle的父类
数据库结构如下:
其中hibernate_unique_key表为hibernate主键生成策略的hilo高低位算法使用
CREATE TABLE `box1` (
`id` varchar(50) NOT NULL default '0',
`size` double default NULL,
`name` varchar(50) default NULL,
`description` varchar(50) default NULL,
`width` double default NULL,
`height` double default NULL,
`len` double default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `container1` (
`id` varchar(50) NOT NULL default '0',
`size` double default NULL,
`name` varchar(50) default NULL,
`description` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `bottle1` (
`id` varchar(50) NOT NULL default '0',
`size` double default NULL,
`name` varchar(20) default NULL,
`diameter` double default NULL,
`height` double default NULL,
`description` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `hibernate_unique_key` (
`next_hi` int(11) NOT 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中,每个Java类可以映射为一个数据库表,类的实例对应表中的行。通过注解或XML配置,我们可以定义字段与列的映射,以及主键生成策略等。 四、缓存机制 Hibernate 4.3.8.Final引入了第二级缓存,它可以跨...
- **每个具体类对应一个表**:这种方法不保留继承层次,每个子类在数据库中都有独立的表,但失去了继承的多态性。 - **根类对应一个表**:所有子类的信息都存储在一个表中,通过一个额外的字段来区分不同子类,这...
- **表每个类层次**: 每个继承树使用一个表。 - **表每个子类**: 每个子类使用一个表。 - **表每个子类:使用一个鉴别器**: 结合多个策略。 - **每个类层次混合表与表每个子类**: 混合使用不同策略。 - **每个...
- **Hiberante的对象继承关系之--TPC一个类一张表.doc**:讲述Hibernate处理对象继承和多表映射的方法。 - **hibernate 非主键自增.doc**:关于非主键字段如何实现自动增长的策略。 - **Struts和Hibernate之间搭起...
例如,你可以定义一个通用的数据访问对象(DAO)父Bean,然后为每个特定的数据表创建一个继承自该父Bean的子Bean,这样就可以共享通用的配置并定制特定的功能。 接下来,我们讨论Hibernate框架中的继承。在...
- **第一部分**:介绍了如何创建第一个Hibernate应用程序,包括设置环境、编写实体类、创建映射文件等步骤。 - **设置**:配置Hibernate所需的环境和依赖库。 - **第一个class**:创建一个简单的Java类作为持久化...
- **继承映射**:支持不同类型的继承关系,包括单表继承、类表继承和联合表继承。 - **多租户支持**:允许在同一数据库中为不同用户提供隔离的存储空间。 - **跨库数据同步**:实现在多个数据库之间同步数据,适用于...
Hibernate是一个流行的ORM(对象关系映射)框架,它允许开发者使用Java对象来操作数据库,而无需编写SQL语句。在Spring中,我们可以使用HibernateTemplate或SessionFactoryBean来配置和管理Hibernate。同样,Spring...
JPA 规范提供了一种标准的方式来处理对象关系,Hibernate 是 JPA 的一个实现。 2.4 **OMP中的对象关系** 此处可能是笔误,应为 ORM 中的对象关系,ORM 解决了传统 JDBC 编程中数据层与业务层之间的耦合问题。 2.5 ...
- **分页显示的实现**:通过SQL查询或Hibernate API实现数据分页。 #### 企业在线信息系统网站概述与架构设计 - **概述**: - 该网站旨在为企业的日常运营提供一个综合的信息管理系统。 - 包括员工登录、人事...
完成这些步骤后,下载并运行这个案例,你将看到一个功能完备的Web应用,它展示了Spring、Spring MVC和Hibernate的完美融合。 总的来说,这个整合案例涵盖了Java Web开发的核心技术,对于初学者来说,它是理解和掌握...
标题中的“15 继承(二)(每个子类扩展的属性单独保存在一张表中)”指的是在数据库设计中,特别是在使用对象关系映射(ORM)框架如Hibernate时,处理继承关系的一种策略——单表继承(Single Table Inheritance,STI)...
- **映射文件**:每个实体类都需要有一个对应的映射文件(`.hbm.xml`),用于定义实体类与数据库表之间的映射关系。 #### 六、映射策略详解 - **一对一映射**:可以采用外键或主键的方式实现两个表之间的一对一...
- **继承映射**: 支持单表继承、表每类继承和表每子类继承等多种继承策略。 - **批量更新与删除**: 提供了批量处理操作的能力,以提高数据处理效率。 - **多数据库支持**: 可以同时与多个不同类型的数据库进行交互。...
3. **每个类单独映射到一张表**(Class Table Inheritance,CTI):基类和每个子类都有自己的表,基类表存储所有共有的属性,子类表存储额外的属性。 4. **将类映射为一个通用的表结构**:设计一种通用的表结构来...
在学习这个案例时,你可以逐步分析每个组件的注解,了解它们如何协同工作,以及如何通过注解实现松耦合和高内聚的设计原则。这不仅有助于加深对SSH框架的理解,也有利于你在实际项目中灵活运用这些技术。
总的来说,这个案例是一个实用的学习资源,通过它你可以理解三个框架的集成方式,以及如何在实际项目中使用它们实现数据操作。学习和掌握这些技术,将有助于提升你在Java Web开发领域的专业技能。