- 浏览: 154588 次
- 性别:
- 来自: 大连
-
文章分类
最新评论
-
fddjxllren:
session.find()是不支持动态绑定参数的.要使用it ...
Hibernate查询之list/iterator -
xiaofeiyang:
http://svn.apache.org/repos/asf ...
struts,hibernate,spring 版本控制svn的URL地址 -
peterxiemin:
emp在建立的时候,报无效的月份,为什么 ?
oracle的练习表---employee -
java_bigniu:
...
Hibernate查询之list/iterator -
lanhai921:
学习下,谢谢分享。
itext基本用法
一对多关联分单向一对多关系 和双向一对多关系 ;
- 单向一对多关系:
实例:User和Courses关系,一个User可以同时拥有多个Courses;而User所选的Courses只能属于它的主人;他们的关系是:主控方---User,被倥方---Courses;
TUser:
public class TUser implements java.io.Serializable { private static final long serialVersionUID = 1L; private Integer userid; private String name; private Set<TCourses> courses; get()/set() }
TCourses:
public class TCourses implements java.io.Serializable { private static final long serialVersionUID = 1L; private Integer coursesId; private String name; get()/set() }
TUser.hbm.xml:(对于一对多的关系,我们可以用java.util.Set()类型的Collection,在XML中的表现就是<set></set>),为了保持关联关系,我们需要在主控方配置级联关系;
<hibernate-mapping package="com.keith.one2many.uni"> <class name="TUser" table="TUser" dynamic-update="true" dynamic-insert="true"> <id name="userid"> <generator class="native"/> </id> <property name="name" /> <set name="courses" cascade="all"> <key column="user_id"></key> <one-to-many class="TCourses"/> </set> </class>
Tcourses.hbm.xml:
<hibernate-mapping package="com.keith.one2many.uni"> <class name="TCourses" table="TCourses"> <id name="coursesId"> <generator class="native"/> </id> <property name="name" /> </class> </hibernate-mapping>
测试方法:
//添加数据 Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); TCourses courses1 = new TCourses(); courses1.setName("java"); TCourses courses2 = new TCourses(); courses2.setName("linux"); TCourses courses3 = new TCourses(); courses3.setName("OS"); Set<TCourses> courseses = new HashSet<TCourses>(); courseses.add(courses1); courseses.add(courses2); courseses.add(courses3); TUser user = new TUser(); user.setName("keith"); user.setCourses(courseses); session.save(user); session.getTransaction().commit();
看下Hibernate给我们的展现的SQL:
--创建数据库TCourses create table TCourses ( coursesId integer not null auto_increment, name varchar(255), user_id integer, primary key (coursesId) ) --创建数据库TUser create table TUser ( userid integer not null auto_increment, name varchar(255), primary key (userid) ) --设置关系 alter table TCourses add index FKB23474C41422125 (user_id), add constraint FKB23474C41422125 foreign key (user_id) references TUser (userid) --插入数据 Hibernate: insert into TUser(name) values(?) Hibernate: insert into TCourses(name) values(?) Hibernate: insert into TCourses(name) values(?) Hibernate: insert into TCourses(name) values(?) Hibernate: update TCourses set user_id=? where coursesId=? Hibernate: update TCourses set user_id=? where coursesId=? Hibernate: update TCourses set user_id=? where coursesId=?
- 双向一对多关联
双向一对多的关系是“一对多”与“多对一”关联的组合,所以我们必须在主控方配置单向一对多关系的基础上,在被动方配置与其对应的多对一关系;
我们只需在被倥方进行修改即可;
TCourses:
public class TCourses implements java.io.Serializable { private static final long serialVersionUID = 1L; private Integer coursesId; private String name; private TUser user; get()/set() }
TCourses.hbm.xml:
<hibernate-mapping package="com.keith.one2many.doubleSide"> <class name="TCourses" table="TCourses"> <id name="coursesId"> <generator class="native"/> </id> <property name="name" /> <many-to-one name="user" column="user_id" class="TUser"/> </class> </hibernate-mapping>
测试代码(添加数据):
// 新增用户 TUser user = new TUser(); user.setName("keith"); session.save(user); // 为用户增加课程,主动端操作 TUser user= (TUser) session.load(TUser.class, 1); TCourses courses = new TCourses(); courses.setName("java"); user.getCourses().add(courses); session.save(user); // 为用户增加课程,被动端操作 TUser user = (TUser) session.load(TUser.class, 1); TCourses courses = new TCourses(); courses.setName("OS"); courses.setUser(user); session.save(courses);
查询:
// 通过user 查询courses TUser user = (TUser) session.load(TUser.class, 1); System.out.println("user's name:" + user.getName()); TCourses courses = null; Iterator<TCourses> it = user.getCourses().iterator(); while (it.hasNext()) { courses = it.next(); System.out.println("user's courses:" + courses.getName()); } //通过courses查询user TCourses courses = (TCourses) session.load(TCourses.class, 2); System.out.println(courses.getUser().getName());
看下建表SQL:
10:07:54,209 DEBUG SchemaExport:377 - create table TCourses ( coursesId integer not null auto_increment, name varchar(255), user_id integer, primary key (coursesId) ) 10:07:54,212 DEBUG SchemaExport:377 - create table TUser ( userid integer not null auto_increment, name varchar(255), primary key (userid) ) 10:07:54,217 DEBUG SchemaExport:377 - alter table TCourses add index FKB23474C46B6EDEB3 (user_id), add constraint FKB23474C46B6EDEB3 foreign key (user_id) references TUser (userid)
附上代码;
发表评论
-
Hibernate之分页
2011-01-09 17:30 914在Hibernate中,通过对不同数据库的统一接口设计,实现了 ... -
hibernate之结果集排序
2011-01-09 17:07 1349无序集和有序集,是针对hibernate数据持久过程中,是否保 ... -
hibernate之Collection类型
2011-01-09 16:42 1459Collection类型: ... -
Hibernate之海量数据操作
2011-01-09 09:59 1072批量添加 在实 ... -
hibernate之数据存储
2011-01-07 16:33 7281,session.save(); 方法用于实体对象到数 ... -
hibernate之延迟加载(Lazy Loading)
2011-01-07 15:43 1206避免在某些情况下,关 ... -
Hibernate查询之list/iterator
2011-01-07 14:13 6365在Hibernate3中将Session.find(),Ses ... -
Hibernate之查询缓存(The Query Cache)
2011-01-07 09:21 1041查询的结果集也可以被缓存。只有当经常使用同样的参数进行查询时, ... -
hibernate之数据加载---Session.get/load
2011-01-06 16:54 1002Session.get/load() 都是根 ... -
hibernate之乐观锁(Optimistic Locking)
2011-01-06 16:34 1673相对于悲观锁,乐观锁采取了更加宽松的加锁机制,悲观锁大多数是依 ... -
Hibenate之悲观锁(Pessimistic Locking)
2011-01-06 15:34 1383什么是“锁”? 业务逻辑的实现过程中,往往需要保证数据的排他 ... -
Hibernate之事务管理
2011-01-06 15:00 828Hibernate是JDBC的轻量级封装,本身不具备事务管理能 ... -
初识---事务管理
2011-01-06 14:28 809何为“ 事务管理 ”? ... -
Hibernate之缓存同步策略
2011-01-06 13:43 1318缓存同步决定了数据对 ... -
Hibernate之数据缓存
2011-01-06 11:22 1101Hibernate数据缓存(cache ... -
认识数据缓存
2011-01-06 10:36 962数据缓存概述:在特定硬件基础上,缓存(Cache)往往是提升系 ... -
hibernate之脏数据检查
2011-01-06 09:54 2355HIbernate中有个名词---脏数据(dirty Data ... -
hibernate之实体对象生命周期
2011-01-06 09:16 1002在Hibernate的应用中,实体对象的生命周期,是一个关键的 ... -
Hibernate之数据加载方式
2011-01-05 23:09 1131Hibernate 的数据加载方式: 在JDBC的操作中,利 ... -
Hibenrate之多对多关联
2010-12-31 16:39 1130Hibernate多对多关联可以分成单向和双向,多对多关系会借 ...
相关推荐
总之,Hibernate的多对多关联映射是解决复杂关系数据库设计的关键技术之一。通过合理的配置和使用,开发者可以轻松管理实体之间的多对多关系,提高开发效率。理解并熟练掌握这部分知识对于提升Java企业级应用开发...
"hibernate_many2many_2"这个文件名可能是指一个关于Hibernate多对多关联的示例或教程的第二部分,可能包含配置文件、Java实体类、映射文件以及相关的测试代码。 **详细知识点:** 1. **实体类定义**:在Hibernate...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理两个实体之间存在唯一对应关系时非常有用。本篇将重点讲解如何实现一对一主键关联映射的单向关联,并通过一个...
下面将详细介绍Hibernate中的多对一关联关系以及如何实现这一关系。 1. **多对一关联的配置**: - 在实体类中,使用`@ManyToOne`注解来声明一个字段作为多对一的关联字段。这个注解通常用于父类的引用,例如: ``...
在Java的持久化框架Hibernate中,一对一(One-to-One)关系是对象之间的关联类型之一,它代表了两个实体之间存在唯一的对应关系。本篇将详细讲解如何使用Hibernate实现一对一唯一外键(Unique Foreign Key)关联映射...
本篇将详细探讨 Hibernate 之中的一对一关联映射,这是一种常见的关系数据库设计模式,在实际开发中经常被用到。 一对一关联映射在Hibernate中表示两个实体类之间存在一对一的关系,也就是说,每个实体类的对象只...
- 虽然一对一关联提供了便利,但过多的一对一关联可能会影响性能,因为每次查询可能涉及多个表,增加数据库访问的复杂性。因此,应谨慎设计实体间的关系。 8. **实例应用** - 在实际项目中,一对一关联常用于用户...
【hibernate之一对多配置demo】:在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。本教程主要关注Hibernate中的一对多关系配置,并通过XML来实现,同时也涵盖了...
在" Hibernate教程07_关系映射之一对一双向主键关联"中,我们将学习如何设置这种关联。首先,我们需要创建两个实体类,例如`Employee`和`Department`。在每个类中,我们都需要定义主键字段,并用`@Id`注解标记。然后...
在Hibernate中,一对一关联的配置主要通过注解或XML配置文件完成。对于双向关联,我们需要在两个实体类中分别设置相应的属性和关联注解。 在实体类A中,我们将添加一个类型为B的属性,并使用`@OneToOne`注解来指定...
本教程“传智播客hibernate教程_保存多对一关联关系的更进一步分析”深入探讨了如何在Hibernate中处理多对一的关联关系。这种关联意味着一个实体(多方)可以与多个其他实体(一方)相关联,而每个其他实体只与一个...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型映射方式之一。本文将详细解析如何实现一对一唯一外键(Uniquely Foreign Key,UFK)关联映射,特别是在单向关联的情况下的具体...
在这个场景下,我们将讨论一种特殊的一对一关联方式——唯一外键关联(Single ForeignKey Association),且为单向关联。这种关联方式意味着在一个实体中有一个字段作为另一个实体的主键引用。 首先,我们需要理解...
一对一关联适用于实体间一对一的关系,一对多适用于一个实体可以拥有多个子实体的情况,而多对多则适用于两个实体之间存在多对多的关系。理解这些关联类型及其配置对于设计高效、灵活的 ORM 解决方案至关重要。
在Hibernate中,一对多关联映射和多对一关联映射的区别在于维护的关系不同。多对一关联映射中,多的一端维护一的一端的关系,在加载多的一端时,可以将一的一端加载上来。一对多关联映射中,一的一端维护多的一端的...
这种关联关系可以是单向的,也可以是双向的,而这里的"hibernate关联关系之一对一双向关联"着重讨论的是后者。双向关联意味着两个实体类都可以直接访问对方,提供了更方便的数据操作。 在Hibernate中,一对一双向...
在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系是数据库中常见的关联类型,它允许一个实体实例对应多个其他实体实例,反之亦然。在本案例中,我们将深入探讨如何使用Hibernate来处理多对多的关系映射,...
本文将深入探讨Hibernate框架下“多对一”和“一对多”的关联关系,并通过一个具体示例来阐述其操作流程与实现细节。 ### Hibernate中的“多对一”和“一对多” 在数据库设计中,“多对一”(Many-to-One)和“一...