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映射解析 七种映射关系
Hibernate映射解析 七种映射关系 后端 - Java.zip
首先我们了解一个名词ORM,全称是(Object Relational Mapping),即对象关系映射。ORM的实现思想就是将关系数据库中表的...Hibernate正是实现了这种思想,达到了方便开发人员以面向对象的思想来实现对数据库的操作。
所谓关联映射就是将关联关系映射到数据库里,在对象模型中就是一个或多个引用。下面这篇文章详细的给大家介绍了Hibernate映射解析之关联映射的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
hibernate里关联关系映射,各种关系解析,帮助大家搞清楚hibernate的关系映射
hibernate注解解析
Hibernate中的各种映射关系,使用列表进行详细解析,避免初学者混淆各种关联映射关系。
里面对于hibernate的配置文件作了很详细的解释,还有案例截图,依照案例解析更详细清晰
主要介绍了Java的Hibernate框架中的List映射表与Bag映射,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
(1)Configuration:用于解析hibernate.cfg.xml文件和XXXXX.hbm.xml文件,并创建SessionFactory对象。Configuration对象用于配置并且启动Hibernate。Hibernate应用通过Configuration实例来指定对象--关系映射文件的...
主要介绍了Hibernate使用hbm.xml配置映射关系解析,具有一定参考价值,需要的朋友可以了解下。
hibernate 深入 连接 关联级映射,源码解析,spring 与hibernate的配置深入原理
1 首先整合spring和hibernate,这次我们在spring 中配置bean使用注解的方式 ,hibernate实体映射关系也使用注解的方式,配置完毕后用简单方法测试下hibernate是否整合成功。 a 加入支持:添加 spring核心包、...
1.Hibernate工作原理及为什么要用? 原理: ...2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory
12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和...
主要介绍了Java的Hibernate框架的一对一关联映射,包括对一对一外联映射的讲解,需要的朋友可以参考下
主要介绍了Java的Hibernate框架中的持久化类和映射文件,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
项目中如果没有添加antlr-2.7.6.jar,那么相关的hibernate映射不会执行hql语句 并且会报NoClassDefFoundError:antlr/ANTLRException antlr-2.7.6.jar 是 ANother Tool for Language Recognition 的简称,它是一个用于...