Hibernate映射解析!
<hibernate-mapping package="com.allanlxf.hbn.o2m">
<class name="Order" table="order_o2m">
<id name="id" column="id" type="integer">
<generator class="sequence">
<param name="sequence">order_o2m_seq</param>
</generator>
</id>
<property name="no" column="no" type="string"/>
<property name="owner" column="owner" type="string"/>
<property name="sendDate" column="sdate" type="date"/>
<set name="items" cascade="all-delete-orphan" inverse="true">
<key column="orderid" />
<one-to-many class="Item"/>
</set>
</class>
</hibernate-mapping>
*****************************************************************************************
<一>映射类所在的包;
<hibernate-mapping package="com.allanlxf.hbn.o2m">
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
<二>将类和数据库的表联系起来;
<class name="Order" table="order_o2m">
class name="Order" (实体类的类名)
table="order_o2m" (实体类所对应的表名)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
<三>主键生成策略;
<id name="id" column="id" type="integer">
name="id" (实体类里的属性名)
column="id" (实体类所对应表中的字段名)
type="integer" (字段名id所属的类型<类中的"int"类型在表中等于"integer"类型>)
______________________________________________________________________________________________
<generator class="sequence">
class="sequence"> (指定主键id生成策略为sequence算法)
______________________________________________________________________________________________
<param name="sequence">order_o2m_seq</param>
name="sequence">order_o2m_seq< (指sequence算法所对应的是库中所创建的order_o2m_seq名)
</generator>
</id> (注:这样的算法是需要在库中创建的,创建方法:create sequence order_o2m_seq)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
<四>类中的属性和字段之间建立联系;
<property name="no" column="no" type="string"/>
name="no" (类中的属性名)
column="no" (表中的字段名)
type="string" (指定字段名的类型) 注:类型可以省略,因为Hibernate可以自动识别,Data类型必须指名
_______________________________________________________________________________________________
<property name="owner" column="owner" type="string"/> (同上)
<property name="sendDate" column="sdate" type="date"/> (同上)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
<五>指定一对多关联的对象属性;
<set name="items" cascade="all-delete-orphan" inverse="true">
set name="items" (自身实体类的属性名"items") 注:Order类中的属性Set<Item> items = new HashSet<Item>();此属性起关联作用
cascade="all-delete-orphan" ("cascade"级联的标签,删除主对象)
inverse="true" (inverse="true",维护权在Item手中,于是Hibernate不再发送update语句,而由Item自动取得orderid.)
________________________________________________________________________________________________
<key column="orderid" />
key column="orderid" ("key column"中key标签总是和本身类(Order)主键值相对应)
________________________________________________________________________________________________
<one-to-many class="Item"/>
class="Item" (一对多所关联对象的类名)
_______________________________________________________________________________________________
</set>
</class>
</hibernate-mapping>
*******************************************************************************************
总结:主要针对第五步骤:
现对每个属性具体描述一下:
set name="items"中的"items"其实是一个集合的对象,它是将Item中的条目放到集合中,这里为什么用HashSet方法,而不用list 方法呢?区别是HashSet方法是一种无序排列,排除可重性;而list是有序排列,不排除可重性.
cascade用法,我用了表来表示
================================================================================================================
cascade属性值 || 意义
----------------------------------------------------------------------------------------------------------------
none || 在保存,删除或修改对象时,不考虑对其附属物(关联对象)的操作,这是默认设置
----------------------------------------------------------------------------------------------------------------
save-update || 在保存,更新当前对象时,级联保存,更新附属物(临时对象,游离对象)
----------------------------------------------------------------------------------------------------------------
delete || 在删除当前对象时,级联删除附属物
----------------------------------------------------------------------------------------------------------------
all || 包含save-update和delete的操作
----------------------------------------------------------------------------------------------------------------
delete-orphan || 删除和当前对象解除关系的附属对象
================================================================================================================
inverse="true",如果这个属性设置不是true,那么在实现添加过程中都是一条insert语句加上一条update语句,如果为 true,那么就是由对方去维护,就是说在添加的过程中只用一条insert语句就可以.(inverse="true"一般加在set端,哪边有FK, 就由哪边负责).
key column="orderid",就是在取得Order对象时,通过order_o2m表中的主键id与item_m2o表中的外键orderid进行匹配.
******************************************************************************************
create table order_o2m
(
id number(4) not null,
no varchar2(13),
owner varchar2(20),
sdate date,
primary key(id)
)
create sequence order_o2m_seq;
/**多对一**/
<hibernate-mapping package="com.allanlxf.hbn.o2m">
<class name="Item" table="item_m2o">
<id name="id" column="id" type="integer">
<generator class="sequence">
<param name="sequence">item_m2o_seq</param>
</generator>
</id>
<property name="product" column="product" type="string"/>
<property name="price" column="price" type="double"/>
<property name="amount" column="amount" type="integer"/>
<many-to-one name="order" class="Order" column="orderid"/>
</class>
</hibernate-mapping>
*************************************************************************************
<一>映射类所在的包;
<hibernate-mapping package="com.allanlxf.hbn.o2m">
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
<二>将类和数据库的表联系起来;
<class name="Item" table="item_m2o">
class name="Item" (实体类的类名)
table="item_m2o" (实体类所对应的表名)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
<三>主键生成策略;
<id name="id" column="id" type="integer">
name="id" (实体类里的属性名)
column="id" (实体类所对应表中的字段名)
type="integer" (字段名id所属的类型<类中的"int"类型在表中等于"integer"类型>)
______________________________________________________________________________________________
<generator class="sequence">
class="sequence"> (指定主键id生成策略为sequence算法)
______________________________________________________________________________________________
<param name="sequence">item_m2o_seq</param>
name="sequence">item_m2o_seq< (指sequence算法所对应的是库中所创建的item_m2o_seq名)
</generator>
</id> (注:这样的算法是需要在库中创建的,创建方法:create sequence item_m2o_seq;)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
<四>类中的属性和字段之间建立联系;
<property name="product" column="product" type="string"/>
name="product" (类中的属性名)
column="product" (表中的字段名)
type="string" (指定字段名的类型) 注:类型可以省略,因为Hibernate可以自动识别,Data类型必须指名
_______________________________________________________________________________________________
<property name="price" column="price" type="double"/> (同上)
<property name="amount" column="amount" type="integer"/> (同上)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
<五>指定多对一关联的对象属性;
<many-to-one name="order" class="Order" column="orderid"/>
name="order" (自身实体类中的属性名) 注:Item类中的属性private Order order此属性起关联作用
class="Order" (所关联对象(实体类)的类名)
column="orderid" (orderid是Item表中的字段名(列名),同时也是外键,起关联作用) (注:此外键的创建方法:alter table item_m2o add constraint fk_item_order_m2o foreign key(orderid) references order_o2m(id) )
________________________________________________________________________________________________
</class>
</hibernate-mapping>
*****************************************************************************************
总结:此总结针对步骤三以及步骤五:
步骤三:主要是对ID的生成算法作一些描述.ID的生成算法常用的有以下几种:
"sequence(采用数据库提供的Sequence机制生成主键,适用于支持Oracle数据库);
"identity"(采用数据库提供的主键生成机制,DB2/SQLServer/MySQL);
"increment"(主键按数值逐渐递增.如果在同一个数据库中有多个实例访问,就避免使用,个人认为适合单线程);
"native"(由Hibrenate根据底层数据库自行判断采用identity,hilo和sequence中的一种作为主键生成方式);
"foreign"(使用外部表的字段作为主键);
"uuid.hex"是基于Hibernate128位惟一值产生算法生成十六进制数值.
步骤五:主要阐述一下原理,在Item类中包含了"order"属性(order属性是让Item类与Order类产生关联),然后在item_m2o表中通过orderid(外键)于order_o2m发生关联(item_m2o表的外键是引用了order_o2m主键),order_o2m的实体类是 Order
******************************************************************************************
结合表结构对比分析:
create table item_m2o
(
id number(4) not null,
product varchar2(30),
amount number(5),
price number(6,1),
orderid number(4),
primary key(id)
)
create sequence item_m2o_seq;
alter table item_m2o add constraint fk_item_order_m2o
foreign key(orderid)
references order_o2m(id)
分享到:
相关推荐
这个名为“Hibernate映射解析 七种映射关系 后端 - Java”的压缩包文件显然包含了关于Hibernate映射关系的详细讲解。让我们深入探讨一下Hibernate的映射解析及其七种主要的映射关系。 首先,Hibernate通过XML映射...
hibernate映射文件是Java开发中用于对象关系映射(ORM)的重要组成部分,它将数据库表与Java类之间的关系进行定义,使得开发者无需编写大量的SQL语句,就能实现对数据库的操作。`生成hibernate映射文件工具`是为了...
### 常用Hibernate映射配置详解 #### 1. hibernate-mapping节点解析 `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库...
在本篇《Hibernate源码解析(二)》中,我们将深入探讨Hibernate这一强大的Java对象关系映射(ORM)框架的内部工作原理。这篇博客旨在帮助开发者更好地理解Hibernate的核心机制,以便于更高效地利用它来处理数据库...
本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关配置和操作。 一、多对多关联概述 在数据库设计中,多对多关联表示两个表之间的关系,如学生和课程的关系,一个学生可以选修多门课程,而...
**标题解析:**“hibernate映射心得 原创” 这个标题表明了本文将主要探讨作者在使用Hibernate框架进行对象关系映射(ORM)时的个人理解和经验。Hibernate是一个流行的Java ORM框架,它允许开发者用面向对象的方式...
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
本文将深入探讨 Hibernate 中的一对一映射关系,并以"hibernate 映射关系学习入门 一对一映射Eclipse源码"为主题,详细解析其概念、配置以及实际应用。 一对一映射是Hibernate中的一种关联关系,它表示两个实体之间...
在压缩包文件`news-SSH2`中,可能包含了一些示例项目的源码,包括Struts2的配置文件、Action类、Spring的配置文件、Service和DAO实现,以及Hibernate的实体类和映射文件。通过学习和分析这些代码,开发者可以更深入...
#### Hibernate映射文件结构解析 Hibernate映射文件是连接Java对象与数据库表的关键,它定义了对象与数据库表之间的映射关系。映射文件的根元素是`<hibernate-mapping>`,该元素可以拥有多个`<class/>`子元素,每个...
标题“Hibernate映射关系配置:XML方式和注解方式”涉及到的是Java持久层框架Hibernate中的一个重要概念——对象关系映射(ORM)。在这个主题中,我们将探讨如何通过XML映射文件和注解来配置Hibernate实体之间的关系...
### Hibernate关联映射的作用与常用属性详解 #### 关联映射概述 在对象关系映射(Object Relational Mapping,简称ORM)技术中,Hibernate作为Java领域内非常成熟且功能强大的框架之一,它允许开发者将Java类映射...
Spring提供了`LocalSessionFactoryBean`用于配置基于XML的Hibernate映射,而`AnnotationSessionFactoryBean`则用于处理基于注解的映射。这两个类分别处理不同的映射方式,所以默认情况下,它们不能直接共存于同一个...
【Hibernate注释深入解析】 在Java开发中,Hibernate是一个广泛使用的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库。在Hibernate中,注释是一种强大的工具,可以简化配置,使得代码更加简洁...
《Hibernate源码解析(三)》这篇文章主要探讨了Hibernate框架的深入源码解析,这是对 Hibernate 框架理解的进一步深化。在本篇中,作者聚焦于几个关键的组件和机制,帮助读者理解 Hibernate 如何高效地管理和操作...
《Hibernate映射继承实战解析》 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者用面向对象的方式处理数据,而无需关心底层SQL语句的编写。在大型项目中,...
《Hibernate源码解析(一)》 在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。深入理解Hibernate的源码,不仅可以帮助开发者更好地运用该工具,还能提升对Java编程和...