- 浏览: 540128 次
- 性别:
- 来自: 南京
-
文章分类
- 全部博客 (168)
- java基础 (22)
- 面向对象编程 (2)
- 集合 (4)
- I/O操作 (5)
- 多线程 (9)
- java高级特性 (8)
- 网络编程 (0)
- sql基础 (23)
- JDBC (1)
- 数据结构与算法 (20)
- 软件测试 (1)
- 程序员小知识 (2)
- WEB开发 (15)
- 其他 (11)
- Struts (3)
- Hibernate (8)
- Spring (4)
- 设计模式 (5)
- java基础快速总结 (1)
- 正则表达式 (3)
- UML (3)
- XML操作 (0)
- 编译原理 (1)
- tomcat (2)
- EJB (0)
- javascript (4)
- 个人系统设计 (1)
- Extjs (3)
- 面试题总结 (4)
- 技术大综合 (2)
- 最经需要搞好多的开源软件,集中下 (0)
- java重写hashcode的分析(转) (1)
最新评论
-
jerry.zhao:
ybzshizds 写道这种用工厂模式解决的办法其实还是有一个 ...
InitialContext和lookup -
小土豆内特:
static class Queue
java实现队列 -
leizisdu:
感谢楼主讲解、分享!
工厂模式 -
kchiu:
写了没什么用
EXT组件xtype简介 -
u010271301:
大哥 能描述的跟详细点么?
浅谈write(byte[] b)和write(byte[] b,int off,int len)的区别
1.多对一映射
对象模型:
User | Group |
id:int name:String group:Group |
id:int name:String |
映射关系:
<hibernate-mapping package="com.nintenyun.hibernate">
<class name="User" table="t_user">
<id name="id" column="id">
<generator class="identity"/>
</id>
<property name="name" column="User_name" unique="true"/>
<many-to-one name="group" column="groupid"/>
</class>
</hibernate-mapping>
2.1、一对一主键关联映射(单向Person-->IdCard)
对象模型:
Person | IdCard |
id:int name:String idCard:IdCard |
id:int cardNo:int |
映射关系:
<hibernate-mapping package="com.nintenyun.hibernate">
<class name="Person" table="t_person">
<id name="id">
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name" column="Person_name" />
<one-to-one name="idCard" constrained="true"/>
</class>
</hibernate-mapping>
注意:
<!-- one-to-one标签的含义,指示hibernate怎么加载它的关联对象,默认根据主键加载,
constrained="true", 表明当前主键上存在一个约束,person的主键作为外键参照了idCard
-->
一对一主键关联映射中,默认了Cascade属性。只有在<one-to-one>标签中才会默认。
一对一是从Person这个角度看的,看到这个人知道它的身份证号。主键关联,Person中的主键是个外键,参照IdCard的主键生成,怎样让生成的主键一样。
2.2一对一主键关联映射:(双向关联Person<---->IdCard)
对象模型: id:int name:String idCard:IdCard id:int cardNo:int person:Person
Person
IdCard
映射关系:
<hibernate-mapping package="com.nintenyun.hibernate">
<class name="Person" table="t_person">
<id name="id">
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name" column="Person_name" />
<one-to-one name="idCard" constrained="true"/>
</class>
<class name="IdCard" table="t_card">
<id name="id">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<property name="cardNo" column="CardNo" />
<one-to-one name="person" constrained="true"/>
</class>
</hibernate-mapping>
2.3 一对一外键关联映射(单向)
对象模型:
Person | IdCard |
id:int name:String idCard:IdCard |
id:int cardNo:int |
映射关系:
<hibernate-mapping package="com.nintenyun.hibernate">
<class name="Person" table="t_person">
<id name="id">
<generator class="identity">
</generator>
</id>
<property name="name" column="Person_name" />
<many-to-one name="idCard" unique="true"></many-to-one>
</class>
</hibernate-mapping>
注意:此处比普通的多对一关系多了一个unique="true"表示唯一外键关联,也可实现一对一的映射关系。
2.4 一对一外键关联映射(双向) 对象模型: id:int name:String idCard:IdCard id:int cardNo:int
Person
IdCard
映射关系:
<hibernate-mapping package="com.nintenyun.hibernate">
<class name="Person" table="t_person">
<id name="id">
<generator class="identity">
</generator>
</id>
<property name="name" column="Person_name" />
<many-to-one name="idCard" unique="true"></many-to-one>
</class>
<class name="IdCard" table="t_idcard">
<id name="id" column="id">
<generator class="identity"/>
</id>
<property name="cardNo" column="cardno" />
<one-to-one name="person" property-ref="idCard"></one-to-one>
</class>
</hibernate-mapping>
注意:
<one-to-one>默认是与主键比较,Property-ref=”idCard”会指定与哪一个字段比较.
加入<one-to-one>标签和数据库没有关系,是告诉Hibernate怎么来做这件事,所以数据库不用重新导出,不像<many-to-one>因为. <many-to-one>要在表里加字段
注:
<one-to-one>标签 含义:指示如何加载关联对象,或者引用对象,默认根据主键加载,
<many-to-one>标签含义:加入外键在多的一端,指向一的一端
3.1.一对多关联(单向)
模型文件:
id:int name:String student:Set id:int name:String
Classes
Student
映射关系:
<hibernate-mapping package="com.nintenyun.hibernate">
<class name="Class" table="t_class">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<set name="student" inverse="false" cascade="all"> <key column="classid" />
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
在该配置文件中,inverse可以使用默认false,或者显示指定false,如以上代码。这样就指定一对多之间的关系由Class这个POJO来维护。在单项一对多关联中,这一点很重要,下面我们通过测试来说明。cascade="all"指定级联的之间的等级,它具有如下几种值:
all : 所有情况下均进行关联操作。
none:所有情况下均不进行关联操作。这是默认值。
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。
缺点:若将Student的classid设置为非空,将无法保存。因为不是student这一端维护关系,所以student不知道是哪个班级.
改进 采用 一对多双向关联
<set name="student" inverse="true">
这样的好处是 存入数据让多的一端进行维护,不需要发出多余的update.<!-- 分页 -->
3.2.一对多关联(双向)
模型文件:
id:int name:String student:Set id:int name:String
Classes
Student
映射关系:
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<set name="student" inverse="false" cascade="all"> <key column="classid" />
<one-to-many class="Student"/>
</set>
</class>
4.1多对多映射(单向)
对象模型:
id:int name:String id:int name:String role:Set
Role
User
映射关系:
<hibernate-mapping package="com.nintenyun.hibernate">
<class name="User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<set name="role" table="t_user_role">
<key column="userid"></key>
<many-to-many class="Role" column="roleid" />
</set>
</class>
</hibernate-mapping>
这样,hibernate会自动产生中间表t_user_role(userid,roleid) 并且是复合主键,userid为t_user的外键,roleid为t_role的外键
4.2多对多映射(双向)
对象模型:
id:int name:String user:Set id:int name:String role:Set 映射关系: <hibernate-mapping package="com.nintenyun.hibernate"> <class name="User" table="t_user">
注意:
Role
User
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<set name="role" table="t_user_role">
<key column="userid"></key>
<many-to-many class="Role" column="roleid" />
</set>
</class>
<class name="Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<set name="user" table="t_user_role">
<key column="userid"></key>
<many-to-many class="User" column="userid" />
</set>
</class>
</hibernate-mapping>
上面中间表名字是一样的
这样,hibernate也会自动产生中间表t_user_role(userid,roleid) 并且是复合主键,userid为t_user的外键,roleid为t_role的外键
5.1第一继承映射
Animal
private int id
private String name
private Boolean sex
--------------------------------------------------
public class Bird extends Animal
private int height
--------------------------------------------------
public class Pig extends Animal
private int weight
映射关系:
<hibernate-mapping package="com.nintenyun.hibernate">
<class name="Animal" table="t_animal" >
<id name="id" >
<generator class="native"/>
</id>
<discriminator column="type" type="string"></discriminator>
<property name="name"/>
<property name="sex"/>
<subclass name="Pig" discriminator-value="P">
<property name="weight"/>
</subclass>
<subclass name="Bird" discriminator-value="B">
<property name="height"/>
</subclass>
</class>
</hibernate-mapping>
5.2第二继承映射 <hibernate-mapping package="com.nintenyun.hibernate"> 5.2第三继承映射 <hibernate-mapping package="com.nintenyun.hibernate"> 6.Component 映射
component不是实体,没有OID 对象模型 public class Employee 映射关系: <hibernate-mapping package="com.nintenyun.hibernate"> 7 复合主键mapping 通常将复合主键相关属性,单独放到一个类中 这个类必须实现 Serializable接口 这个类必须重写hashCode()和equals()方法 <hibernate-mapping package="com.nintenyun.hibernate">
<class name="Animal" table="t_animal" >
<id name="id" >
<generator class="native"/>
</id>
<property name="name"/>
<property name="sex"/>
<joined-subclass name="Pig" table="t_pig">
<key column="pid"/>
<property name="weight"/>
</joined-subclass>
<joined-subclass name="Bird" table="t_bird">
<key column="bid"/>
<property name="height"/>
</joined-subclass>
</class>
</hibernate-mapping>
<class name="Animal" table="t_animal" >
<id name="id" >
<generator class="native"/>
</id>
<property name="name"/>
<property name="sex"/>
<union-subclass name="Pig" table="t_pig">
<property name="weight"/>
</union-subclass>
<union-subclass name="Bird" table="t_bird">
<property name="height"/>
</union-subclass>
</class>
</hibernate-mapping>
private int id
private String name
private Contact contact
-------------------------------------
public class Contact
private String email
private String address
private String zipcode
private String contactTel
-------------------------------------
public class User
private int id
private String name
private Contact contact
<class name="User" table="t_user" >
<id name="id" >
<generator class="native"/>
</id>
<property name="name"/>
<component name="contact">
<property name="email"></property>
<property name="address"></property>
<property name="zipcode"></property>
<property name="contactTel"></property>
</component>
</class>
</hibernate-mapping>
<class name="SC" table="t_sc" >
<composite-id name="scpk">
<key-property name="sno"/>
<key-property name="cno"/>
</composite-id>
<property name="sname"></property>
<property name="cname"></property>
</class>
</hibernate-mapping>
发表评论
-
Hibernate的查询体系及数据过滤
2010-08-08 17:00 1380Hibernate查询体系分4种过滤数据的方式 ... -
Hibernate区别小结
2010-07-17 12:10 1122一、cascade和inverse的区别: 两者都是面试的热 ... -
Hibernate的一级缓存和二级缓存
2010-07-16 07:00 1130一级缓存和二级缓存 首先缓存概念 缓存是介于应 ... -
Hibernate核心类
2010-07-14 22:17 1386Hibernate核心编程 ORM:指的是对象关系映射( ... -
Hibernate3中状态及相关方法的区别
2010-07-12 22:48 1150Hibernate的对象有3种状态,分别为:瞬时态(T ... -
Eclipse安装hibernate插件及开发
2010-07-12 22:07 11320步骤一:下载Hibernate插件(建议手动安装) 到官网上 ... -
数据库连接的url和驱动器
2010-07-10 09:47 1115各种数据库连接的url和驱动器 URL: 1.Or ...
相关推荐
### Hibernate关联映射总结 #### 一、基础知识 在探讨Hibernate中的关联映射之前,我们需要先理解几个基本概念,这将有助于我们更好地理解和应用这些关联映射。 - **主键**(Primary Key):主键是用来唯一标识一...
hibernate开发的关系: one-to-one,many-to-one,many-to-many学习经验总结
【压缩包子文件的文件名称列表】:“hibernate映射文件自动生成.doc”很可能是这篇博文的文档形式,其中详细介绍了具体的操作步骤、使用工具或者自定义脚本,以帮助开发者理解并应用自动化的映射文件生成过程。...
hibernate表映射一直记不住,这次总结一下,放便下次使用。。。
"Hibernate映射配置实例大全"是一个全面深入的资源,旨在帮助开发者理解和掌握如何有效地配置Hibernate以实现对象关系映射(ORM)。在这个文档中,我们将探讨各种关键的映射配置方法,以及相关的实例。 首先,我们...
对Hibernate映射关系详细总结,可以帮助你学习Hibernate知识
Hibernate,作为Java中广泛使用的对象关系映射(ORM)框架,提供了一种优雅的方式来映射枚举类型到数据库。本文将深入探讨Hibernate如何映射枚举类型,并给出实际应用示例。 ### Hibernate枚举映射方式 #### 1. `@...
标题“Hibernate映射树形结构”指的是如何用Hibernate来存储和操作具有层级关系的数据。 1. **单表映射策略**: Hibernate可以使用单个表来存储树形结构,通过一个自增的`id`字段以及一个表示父节点的`parent_id`...
### Hibernate对象关系映射详解 #### 一、概述 Hibernate是一种用于Java环境下的持久层框架,它主要解决了对象关系映射的问题。通过将Java对象与数据库表进行映射,可以实现对象与关系型数据库之间的无缝转换。这...
hibernate 映射文件 配置分析及要点,你还在为配置hibernate 映射文件而发愁吗?这里总结了它的常用元素及属性。session,SessionFactory的应用
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
总结,一对一映射是Hibernate中的一个重要特性,它使得Java对象与数据库记录之间的对应关系更为灵活。理解并熟练运用一对一映射,能够帮助开发者更好地设计和实现复杂的业务逻辑,提高代码的可读性和维护性。通过...
总结,理解并熟练掌握Hibernate的映射配置是使用Hibernate的关键。通过正确配置,我们可以将复杂的数据库操作转化为简单的Java代码,提高开发效率,并减少错误。在SSH框架下,Hibernate更是成为了企业级应用的首选...
总结来说,XDoclet和Ant在Java开发中扮演着重要角色,前者简化了Hibernate映射文件的管理,后者则为项目构建和自动化提供了强大支持。通过合理的利用这两者,开发者可以提高工作效率,降低出错概率,使项目管理更加...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便实现对象关系映射(ORM)。本文将深入探讨Hibernate中的四种主要集合映射类型:Set、List、Array和Map,以及它们在实际...
总结来说,Hibernate映射模板是实现ORM的关键,它定义了Java对象和数据库表之间的对应关系,包括字段映射、关系映射等。通过熟练掌握和应用这些模板,开发者可以更高效地进行数据库操作,提高开发效率。在实际开发中...
Hibernate 是一个开源的对象关系映射(ORM)框架,它为 Java 开发者提供了一种在 Java 应用程序中管理关系数据库的方式。通过 ORM,Hibernate 可以将 Java 类与数据库表之间的映射关系自动化,从而简化数据访问层的...
此外,自定义对象的映射是Hibernate映射中的一个重要部分。通过在实体类上使用@Entity注解,并使用@Id注解指定主键字段,可以将一个Java类映射到数据库的一张表。字段则通过@Column注解来指定列名和属性,如长度、...
总结来说,Hibernate映射是连接Java对象与数据库之间的重要纽带,通过一系列工具和技术,简化了数据持久化的复杂度,提高了开发效率和代码可维护性。掌握Hibernate映射机制对于任何Java开发者而言都是必不可少的技能...
### Hibernate映射配置详解 #### 引言 Hibernate作为Java领域中最流行的ORM(对象关系映射)框架之一,为开发者提供了强大的数据持久化能力。它能够将Java对象映射到数据库表,反之亦然,从而简化了数据访问层的...