- 浏览: 450706 次
- 性别:
- 来自: 昆明
文章分类
- 全部博客 (144)
- javase (15)
- javaee (10)
- Struts (6)
- hibernate (10)
- spring (1)
- struts2 (9)
- html+javascript+css (13)
- i love jquery (5)
- AJAX (6)
- 数据库 (8)
- java与XML (5)
- JavaWeb (13)
- ant+xdoclet (1)
- JBPM (2)
- Apache POI (1)
- jfreechart (7)
- ZK (1)
- MyEclipse (1)
- 其它 (5)
- Lucene (3)
- JasperReport (8)
- Linux (1)
- Google+ G+ (0)
- Google+ G+ (0)
- Google+ (0)
- G+ (0)
- 爱折腾 (0)
- Twitter (0)
- youtube (0)
- facebook (0)
- Android hosts文件 换行 window unix (1)
- Objective-c (1)
最新评论
-
云端月影:
mark
UIView总结 -
yuji0228:
[i][i][i][i][i][i][i][i][i][i][ ...
JasperReport学习笔记2-创建简单的报表例子 -
hhb19900618:
你好 运行报错java.net.BindException: ...
Java服务器程序 -
tan8888:
即使是定义了compareTo ,treeSet还是会出现相同 ...
HashSet与TreeSet -
chinalian:
谢谢,总结的很清晰。
Jquery模仿Google Suggest基于js的动态下拉菜单
many-to-one
one-to-one主键关连 单向
one-to-one 主键关连 双向
one-to-one 唯一外键关连 单向 就是多对一
one-to-one 唯一外键 双向
one-to-many 单向
one-to-many 双向
many-to-many 双向
一对多双向关联映射:
* 在一一端的集合上使用<key>,在对方表中加入一个外键指向一一端
* 在多一端采用<many-to-one>
注意:<key>标签指定的外键字段必须和<many-to-one>指定的外键字段一致,否则引用字段的错误
如果在”一“一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多
的一端来维护关联关系
关于inverse属性:
inverse主要用在一对多和多对多双向关联上,inverse可以被设置到集合标签<set>上,
默认inverse为false,所以我们可以从”一“一端和”多“一端维护关联关系,
如果设置成inverse为true,则我们只能从多一端来维护关联关系
注意:inverse属性,只影响数据的存储,也就是持久化
inverse和cascade
* inverse是关联关系的控制方向
* cascade操作上的连锁反应
复合主键
集合
那你现在怎么用HIBERNATE的啊?
<!--关联映射的本质:--> <!--* 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用--> <!--<many-to-one>会在多的一端加入一个外键,指向一的一端,这个外键是由<many-to-one>中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致<many-to-one>标签的定义示例:--> <!-- * <many-to-one name="group" column="groupid"/>--> <hibernate-mapping> <class name="com.langhua.hibernate.pojo.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="group" column="groudid" cascade="save-update"></many-to-one> </class> </hibernate-mapping> <hibernate-mapping> <class name="com.langhua.hibernate.pojo.Group" table="t_group"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
one-to-one主键关连 单向
<hibernate-mapping> <class name="com.langhua.hibernate.pojo.Person" table="t_Person"> <!-- person的主键来源idCard,也就是共享idCard的主键 --> <id name="id"> <generator class="foreign"> <param name="property">idCard</param> </generator> </id> <property name="name"/> <!-- one-to-one标签的含义,指示hibernate怎么加载它的关联对象,默认根据主键加载,constrained="true",表明当前主键上存在一个约束,person的主键作为外键参照了idCard --> <one-to-one name="idCard" constrained="true"/> </class> </hibernate-mapping> <hibernate-mapping> <class name="com.langhua.hibernate.pojo.IdCard" table="t_IdCard"> <id name="id"> <generator class="native"/> </id> <property name="num"/> </class> </hibernate-mapping>
one-to-one 主键关连 双向
<hibernate-mapping> <class name="com.langhua.hibernate.pojo.Person" table="t_Person"> <id name="id"> <generator class="foreign"> <param name="property">idCard</param> </generator> </id> <property name="name"/> <one-to-one name="idCard" constrained="true"/> </class> </hibernate-mapping> <hibernate-mapping> <class name="com.langhua.hibernate.pojo.IdCard" table="t_IdCard"> <id name="id"> <generator class="native"/> </id> <property name="num"/> <one-to-one name="person"/> </class> </hibernate-mapping>
one-to-one 唯一外键关连 单向 就是多对一
<hibernate-mapping> <class name="com.langhua.hibernate.pojo.Person" table="t_Person"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <!--可以采用<many-to-one>标签,指定多的一端的unique=true,这样就限制了多的一端的多重性为一通过这种手段映射一对一唯一外键关联--> <many-to-one name="idCard" unique="true" cascade="all"/> </class> </hibernate-mapping> <hibernate-mapping> <class name="com.langhua.hibernate.pojo.IdCard" table="t_IdCard"> <id name="id"> <generator class="native"/> </id> <property name="num"/> </class> </hibernate-mapping>
one-to-one 唯一外键 双向
<hibernate-mapping> <class name="com.langhua.hibernate.pojo.Person" table="t_Person"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="idCard" unique="true" cascade="all"/> </class> </hibernate-mapping> <hibernate-mapping> <class name="com.langhua.hibernate.pojo.IdCard" table="t_IdCard"> <id name="id"> <generator class="native"/> </id> <property name="num"/> <one-to-one name="person" property-ref="idCard"/> </class> </hibernate-mapping>
one-to-many 单向
<hibernate-mapping> <class name="com.langhua.hibernate.pojo.Classes" table="t_classes"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="students" cascade="all"> <key column="classesid"/> <!-- 有缺点 --> <!--多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一--> <!--一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多--> <!--* 如果将t_student表里的classesid字段设置为非空,则无法保存--> <!--* 因为不是在student这一端维护关系,所以student不知道是哪个班的,--> <!--所以需要发出多余的update语句来更新关系--> <one-to-many class="com.langhua.hibernate.pojo.Students"/> </set> </class> </hibernate-mapping> <hibernate-mapping> <class name="com.langhua.hibernate.pojo.Students" table="t_students"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
one-to-many 双向
<hibernate-mapping> <class name="com.langhua.hibernate.pojo.Classes" table="t_classes"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="students" inverse="true" cascade="all"> <key column="classesid"/> <!-- 有缺点 --> <one-to-many class="com.langhua.hibernate.pojo.Students"/> </set> </class> </hibernate-mapping> <hibernate-mapping> <class name="com.langhua.hibernate.pojo.Students" table="t_students"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="classes" column="classesid"/> </class> </hibernate-mapping>
many-to-many 双向
<!--table属性值必须和单向关联中的table属性值一致--> <!--<key>中column属性值要与单向关联中的<many-to-many>标签中的column属性值一致--> <!--在<many-to-many>中的column属性值要与单向关联中<key>标签的column属性值一致--> <hibernate-mapping> <class name="com.langhua.hibernate.pojo.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="roleSet" table="t_user_role"> <key column="userId"/> <many-to-many class="com.langhua.hibernate.pojo.Role" column="roleId"/> </set> </class> </hibernate-mapping> <hibernate-mapping> <class name="com.langhua.hibernate.pojo.Role" table="t_role"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="userSet" table="t_user_role" inverse="true"> <key column="roleId"/> <many-to-many class="com.langhua.hibernate.pojo.User" column="userId"/> </set> </class> </hibernate-mapping>
一对多双向关联映射:
* 在一一端的集合上使用<key>,在对方表中加入一个外键指向一一端
* 在多一端采用<many-to-one>
注意:<key>标签指定的外键字段必须和<many-to-one>指定的外键字段一致,否则引用字段的错误
如果在”一“一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多
的一端来维护关联关系
关于inverse属性:
inverse主要用在一对多和多对多双向关联上,inverse可以被设置到集合标签<set>上,
默认inverse为false,所以我们可以从”一“一端和”多“一端维护关联关系,
如果设置成inverse为true,则我们只能从多一端来维护关联关系
注意:inverse属性,只影响数据的存储,也就是持久化
inverse和cascade
* inverse是关联关系的控制方向
* cascade操作上的连锁反应
复合主键
public class FiscalYearPeriod { private FiscalYearPeriodPK fiscalYearPeriodPK; //开始日期 private Date beginDate; //结束日期 private Date endDate; //状态 private String periodSts; } public class FiscalYearPeriodPK implements Serializable { //核算年 private int fiscalYear; //核算月 private int fiscalPeriod; @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + fiscalPeriod; result = prime * result + fiscalYear; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final FiscalYearPeriodPK other = (FiscalYearPeriodPK) obj; if (fiscalPeriod != other.fiscalPeriod) return false; if (fiscalYear != other.fiscalYear) return false; return true; } }
] <hibernate-mapping> <class name="com.bjsxt.hibernate.FiscalYearPeriod" table="t_fiscal_year_period"> <composite-id name="fiscalYearPeriodPK"> <key-property name="fiscalYear"/> <key-property name="fiscalPeriod"/> </composite-id> <property name="beginDate"/> <property name="endDate"/> <property name="periodSts"/> </class> </hibernate-mapping>
集合
public class CollectionMapping implements Serializable { private int id; private String name; private Set setValue; private List listValue; private String[] arrayValue; private Map mapValue; }
<hibernate-mapping> <class name="com.langhua.hibernate.pojo.CollectionMapping" table="t_CollectionMapping"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="setValue" table="t_setValue"> <key column="set_id"/> <!-- <composite-element class=""> 这个是配置对象 </composite-element> --> <element type="string" column="set_value"/> </set> <list name="listValue" table="t_listValue"> <key column="list_id"/> <list-index column="list_index"/> <element type="string" column="list_value"/> </list> <array name="arrayValue" table="t_arrayValue"> <key column="array_id"/> <list-index column="list_index"/> <element type="string" column="array_value"/> </array> <map name="mapValue" table="t_mapValue"> <key column="map_id"/> <map-key type="string" column="map_key"/> <element type="string" column="map_value"/> </map> </class> </hibernate-mapping>
评论
2 楼
langhua9527
2010-01-09
liuhong2099 写道
我都快忘记怎么配了,现在写东西都不配置了 哈哈
那你现在怎么用HIBERNATE的啊?
1 楼
liuhong2099
2010-01-09
我都快忘记怎么配了,现在写东西都不配置了 哈哈
发表评论
-
hibernate保存ORACLE的blob,clob
2009-11-19 15:28 22051、首先数据表中的clob类型对应java持久化类的Strin ... -
hibernate的二级缓存
2009-03-08 00:47 1128hibernate二级缓存 二级 ... -
hibernate的一级缓存
2009-03-07 17:52 791/** * 在同一个session中发出两次load查询 ... -
hibernate的HQL查询
2009-03-07 16:04 2194在hql中关键字不区分大小写,但是属性和类名区分大小写 1、简 ... -
hibernate中悲观锁和乐观锁和lazy加载
2009-03-07 00:57 4240hibernate中经常用到当多 ... -
hibernate配置文件的一些属性
2009-03-05 17:14 1647帮助文档上面抄过来的一些属性信息 hibernate-mapp ... -
Hibernate的flush()和evict()
2009-03-05 01:49 8470隔离级别 脏读 不可重复读 幻读 ReadUncomm ... -
hibernate中get方法和load方法的区别
2009-03-03 17:29 1546hibernate中get方法和load方 ... -
criteria用法
2008-12-15 13:47 2329Criteria Query通过面向对象化的设计,将数据查询条 ...
相关推荐
2. **创建Hibernate配置文件**:通常命名为`hibernate.cfg.xml`,此文件用于配置数据库连接信息和其他全局设置。 3. **创建持久化类**:持久化类代表数据库中的表,需要遵循一定的约定,例如提供无参数构造器、标识...
### Hibernate配置文件加载后修改配置信息 在Java开发过程中,特别是在使用ORM框架如Hibernate时,开发者经常需要对配置文件中的数据库连接信息进行动态修改或加密处理。本文将详细介绍如何利用反射机制来修改已经...
hibernate配置总结
根据给定的信息,可以看出这里并没有直接提供关于Hibernate配置文件的具体内容。然而,我们可以根据标题“hibernate配置文件”及描述“不会的可以看看,什么乱七八槽的东西.20字,没有问题”来推断出,这部分内容...
**标题:“Hibernate配置”** **概述** Hibernate是一个强大的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。通过提供一个抽象层,Hibernate允许开发人员使用面向对象的方式来处理数据库...
总结,Hibernate的基本配置涉及数据库连接信息设置、实体类的定义、以及SessionFactory的创建。理解这些核心概念后,你就可以开始利用Hibernate的强大功能来简化数据库操作,提高开发效率。记得在实际应用中根据自己...
【Hibernate 简单 PPT 总结】 Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。通过提供一套API和元数据,Hibernate允许开发者将业务对象直接映射到数据库表,从而避免了...
### Hibernate配置文件详解 #### 一、概述 Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库交互的过程。在使用Hibernate的过程中,一个关键的配置文件是`hibernate.cfg.xml`。这个文件...
总结一下,SSH整合中的Hibernate配置涉及到Spring事务管理器的设置,包括创建SessionFactory,配置HibernateTransactionManager,以及选择合适的事务管理策略。正确配置后,开发者可以充分利用Spring和Hibernate的...
在项目初期或数据库模式更改时,手动编写Hibernate配置文件不仅耗时且容易出错。因此,利用工具自动生成配置文件成为提升开发效率的关键。 #### 二、在MyEclipse环境下配置Hibernate 在MyEclipse这一集成开发环境...
### Hibernate 参数配置详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它通过提供一套丰富的 API 和配置选项来简化数据库访问。本文档将深入探讨 Hibernate 的核心配置参数及其功能,帮助开发者更...
### Hibernate配置数据库连接知识点详解 #### 一、Hibernate简介与作用 Hibernate 是一款开源的对象关系映射(Object Relational Mapping, ORM)框架,用于 Java 应用程序与关系型数据库之间的交互。它允许开发者以...
【标题】:“Hibernate4的一些总结” 【描述】:这篇博客主要涵盖了Hibernate4框架在实际开发中的应用和理解,作者通过个人实践对Hibernate4的核心特性和使用技巧进行了深度解析。 【标签】:“源码”和“工具”这...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...
- **配置简化**:Spring支持多种配置方式,包括XML、注解等,这有助于简化Hibernate配置的复杂性。 #### 三、Spring与Hibernate整合的核心配置 根据给定的部分内容,我们可以看到一个典型的Spring配置示例,用于...
### Hibernate配置数据源详解 #### 一、引言 在软件开发过程中,特别是涉及大量数据库交互的应用场景下,选择合适的数据源配置对于提高系统性能、稳定性具有重要意义。Hibernate作为Java领域内广泛使用的对象关系...
**Hibernate配置总结** Hibernate是一款强大的Java对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层数据处理。本文将深入探讨Hibernate的配置过程,特别是对象关系映射...
总结,这个示例展示了如何在Spring Boot 2.0中配置多数据源,使用Hibernate作为ORM工具,以及如何在DAO层通过`HibernateDaoSupport`进行数据操作,并在业务逻辑中灵活地切换数据源。这有助于实现更复杂的数据库访问...