`

hibernate配置的一些总结

阅读更多
many-to-one
<!--关联映射的本质:-->
	<!--* 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用-->

<!--<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知识点总结

    2. **创建Hibernate配置文件**:通常命名为`hibernate.cfg.xml`,此文件用于配置数据库连接信息和其他全局设置。 3. **创建持久化类**:持久化类代表数据库中的表,需要遵循一定的约定,例如提供无参数构造器、标识...

    Hibernate配置文件加载后修改配置信息

    ### Hibernate配置文件加载后修改配置信息 在Java开发过程中,特别是在使用ORM框架如Hibernate时,开发者经常需要对配置文件中的数据库连接信息进行动态修改或加密处理。本文将详细介绍如何利用反射机制来修改已经...

    hibernate配置总结

    hibernate配置总结

    hibernate配置文件

    根据给定的信息,可以看出这里并没有直接提供关于Hibernate配置文件的具体内容。然而,我们可以根据标题“hibernate配置文件”及描述“不会的可以看看,什么乱七八槽的东西.20字,没有问题”来推断出,这部分内容...

    Hibernate配置

    **标题:“Hibernate配置”** **概述** Hibernate是一个强大的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。通过提供一个抽象层,Hibernate允许开发人员使用面向对象的方式来处理数据库...

    Hibernate基本配置演示

    总结,Hibernate的基本配置涉及数据库连接信息设置、实体类的定义、以及SessionFactory的创建。理解这些核心概念后,你就可以开始利用Hibernate的强大功能来简化数据库操作,提高开发效率。记得在实际应用中根据自己...

    Hibernate 简单 PPT 总结

    【Hibernate 简单 PPT 总结】 Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。通过提供一套API和元数据,Hibernate允许开发者将业务对象直接映射到数据库表,从而避免了...

    Hibernate配置文件

    ### Hibernate配置文件详解 #### 一、概述 Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库交互的过程。在使用Hibernate的过程中,一个关键的配置文件是`hibernate.cfg.xml`。这个文件...

    ssh整合带hibernate配置文件

    总结一下,SSH整合中的Hibernate配置涉及到Spring事务管理器的设置,包括创建SessionFactory,配置HibernateTransactionManager,以及选择合适的事务管理策略。正确配置后,开发者可以充分利用Spring和Hibernate的...

    Hibernate自动生成配置文件

    在项目初期或数据库模式更改时,手动编写Hibernate配置文件不仅耗时且容易出错。因此,利用工具自动生成配置文件成为提升开发效率的关键。 #### 二、在MyEclipse环境下配置Hibernate 在MyEclipse这一集成开发环境...

    Hibernate 参数配置详解

    ### Hibernate 参数配置详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它通过提供一套丰富的 API 和配置选项来简化数据库访问。本文档将深入探讨 Hibernate 的核心配置参数及其功能,帮助开发者更...

    Hibernate配置数据库连接

    ### Hibernate配置数据库连接知识点详解 #### 一、Hibernate简介与作用 Hibernate 是一款开源的对象关系映射(Object Relational Mapping, ORM)框架,用于 Java 应用程序与关系型数据库之间的交互。它允许开发者以...

    Hibernate4的一些总结

    【标题】:“Hibernate4的一些总结” 【描述】:这篇博客主要涵盖了Hibernate4框架在实际开发中的应用和理解,作者通过个人实践对Hibernate4的核心特性和使用技巧进行了深度解析。 【标签】:“源码”和“工具”这...

    hibernate一级和二级缓存配置与详解

    本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...

    spring和hibernate整合的优化配置

    - **配置简化**:Spring支持多种配置方式,包括XML、注解等,这有助于简化Hibernate配置的复杂性。 #### 三、Spring与Hibernate整合的核心配置 根据给定的部分内容,我们可以看到一个典型的Spring配置示例,用于...

    Hibernate配置数据源.

    ### Hibernate配置数据源详解 #### 一、引言 在软件开发过程中,特别是涉及大量数据库交互的应用场景下,选择合适的数据源配置对于提高系统性能、稳定性具有重要意义。Hibernate作为Java领域内广泛使用的对象关系...

    Hibernate配置总结[包含示例代码段]

    **Hibernate配置总结** Hibernate是一款强大的Java对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层数据处理。本文将深入探讨Hibernate的配置过程,特别是对象关系映射...

    springboot2.0多数据源集成hibernate配置hibernateDaoSupport示例

    总结,这个示例展示了如何在Spring Boot 2.0中配置多数据源,使用Hibernate作为ORM工具,以及如何在DAO层通过`HibernateDaoSupport`进行数据操作,并在业务逻辑中灵活地切换数据源。这有助于实现更复杂的数据库访问...

Global site tag (gtag.js) - Google Analytics