- 浏览: 96645 次
- 性别:
- 来自: 济南
-
最新评论
-
fightingIOW:
案例看了,能实现上传,但是不是异步的,怎么改成页面可以预览呢? ...
swfUpload实例 -
kizz:
您好,实例我看了,确实不错。您有struts2版的吗?现在项目 ...
swfUpload实例
注意 :尽量使用多对一,一对多关系效率有些慢
(1)N--1(单向N--1外键映射) 只要是外键,就会牵扯到多对一的关系
第一步:类、对象之间的关系映射
public class Room {
private int id;
private String roomName;
}
public class User {
private int id;
private String truename;
private Room room;
}
第二步:xml之间的映射
<class name="Room" table="t_room">
<id name="id" column="room_id">
<generator class="native"></generator>
</id>
<property name="roomName" unique="true" not-null="true" column="room_name" length="32"/>
</class>
<class name="User" table="t_user">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="truename" unique="true" not-null="true" column="truename" length="32"/>
<many-to-one name="room" not-null="true" class="Room" column="room_id" --外键
cascade="save-update"> --保存修改级联
</many-to-one>
</class>
第三步:创建对象
Room room = new Room();
room.setRoomName("听雨轩");
User u1 = new User();
u1.setTruename("张三");
u1.setRoom(room);
User u2 = new User();
u2.setTruename("李四");
u2.setRoom(room);
session.save(u1);
session.save(u2);
第四步:查询
User user= (User )session.load(User .class, 1);
Room room = user.getRoom();
System.out.println(user.getTruename());
System.out.println(room .getRoomName());
(2)N--1(双向N--1) 数据库和(1)中的相同
第一步:类、对象之间的关系映射
public class Room {
private int id;
private String roomName;
private Set<User> users; // 增加了user集合 但是数据库没有变化
}
public class User {
private int id;
private String truename;
private Room room;
}
第二步:xml之间的映射
<class name="User" table="t_user">
<id name="id" column="id">
<generator class="native">
</generator>
</id>
<property name="truename" unique="true" not-null="true" column="truename" length="32"/>
<many-to-one name="room" not-null="true" class="Room" column="room_id"
cascade="save-update"></many-to-one>
</class>
<class name="Room" table="t_room">
<id name="id" column="room_id">
<generator class="native"></generator>
</id>
property name="roomName" unique="true" not-null="true" column="room_name" length="32"/>
--增加了set的配置
<set name="users">
<key column="room_id"></key> --参考user中room_id字段
<one-to-many class="User"/>
</set>
</class>
第三步:创建对象 和(1)中的一致
Room room = new Room();
room.setRoomName("听雨轩");
User u1 = new User();
u1.setTruename("张三");
u1.setRoom(room);
User u2 = new User();
u2.setTruename("李四");
u2.setRoom(room);
session.save(u1);
session.save(u2);
第四步:查询
Room room = (Room)session.load(Room.class, 1);
System.out.println(room.getRoomName());
Set<User> users = room.getUsers();
for(User user : users){
System.out.println(user.getTruename());
}
(3)1--N(单向一对多映射) 数据库中表的设计和(2)中表设计一致
第一步:对象关系的映射
public class Room {
private int id;
private String roomName;
private Set<User> users; // 1的一端,加上多的引用
}
public class User {
private int id;
private String truename; // 没有对1的一端的引用
}
第二步:xml的配置
<class name="User" table="t_user">
<id name="id" column="id">
<generator class="native">
</generator>
</id>
<property name="truename" unique="true" not-null="true" column="truename" length="32"/>
</class>
<class name="Room" table="t_room">
<id name="id" column="room_id">
<generator class="native"></generator>
</id>
<property name="roomName" unique="true" not-null="true" column="room_name" length="32"/>
<set name="users" cascade="save-update"
inverse="true"> ---反转,将主控关系交给对方来管理 (默认是false,代表由本身来维护
)
<key column="room_id"></key>
<one-to-many class="User"/>
</set>
</class>
在N--1或者1--N双向关系维护(创建对象时候),强制交给多的一方进行维护,不让1的一方维护,这样能提高效率 , 减少了n条update语句,但是,在查询的时候, 在1的一方就不能查询关联数据了
注意 :尽量使用多对一,一对多关系效率有些慢
发表评论
-
flashPaper转换swf代码 java
2011-09-08 16:12 2875// 使用flashPaper进行 ... -
自主项目安装部署(包含文档)
2011-09-08 15:21 12691. 安装Oracle 1.1运行安装Oracl ... -
oracle 循环插入数据
2011-09-05 17:53 862declarev_LoopCounter Binary_Int ... -
oracle数据库自动备份
2011-09-05 16:13 468把/opt/oraBakSH目录权限放开:chmod -R 7 ... -
后台验证struts2的上传文件大小
2011-08-05 17:06 2194/** * 返回值true表示验证文件大小通过<br/ ... -
tomcat虚拟目录配置(lunix/windows)
2011-08-03 10:50 786虚拟目录的配置: 在</host>的前面添加: ... -
myeclipse6.5 注册码生成器
2011-07-25 09:30 1147解决开发工具myEclipse6.5 注册码过期问题 ... -
本项目中使用添加收藏和设置首页
2011-07-23 14:41 776调用链接: <a href="javascr ... -
常用的网页播放器代码
2011-07-22 16:15 978常用的网页播放器代 ... -
orale不同数据库之间,表数据的转存
2011-07-21 16:27 996不同数据库之间,数据移行 目标: 在oracle数据库 ... -
解决点击页面的查询后,刷新页面,会弹出浏览器自带的对话框
2011-07-20 17:28 9511. 现象:点击页面的查询后,刷新页面,会弹出浏览器自带的对话 ... -
防刷新重复提交 action配置(防乱码) js防刷
2011-07-20 11:35 27101. 现象:在我们系统中,新增、编辑数据后,继续刷新页面后,会 ... -
swfUpload实例
2011-07-19 13:50 10354很好的实例: 官方网站: http://swfup ... -
图片轮播js及调用
2011-07-08 10:54 17141. 图片轮播所需js // JavaScript Docu ... -
设置首页和添加收藏夹
2011-07-06 09:30 1001// JavaScript Document /* *Ç ... -
java导入excel表格
2011-06-18 16:31 998一个从网上下载的很好的excel操作资料! 1 从Ex ... -
枚举的使用 实例
2011-06-17 15:44 768package utils; import java.uti ... -
js 判断文件时候为空
2011-06-16 17:30 3377/** * 初始化 选择试题列表页面,判断复选框是否选中 ** ... -
struts2 下的文件下载
2011-06-16 17:28 940推荐:Struts 2中实现文件下载(修正中文问题)http: ... -
解决linux下oracle导入数据中文乱码方案
2011-05-25 09:53 1887<script type="text/ ...
相关推荐
总结来说,"hibernateORM1-n映射"是关于如何在Hibernate框架下建立和管理数据库中一对多关系的知识。理解和熟练运用这一映射机制,将有助于提高Java应用的数据库操作效率,减少代码量,增强程序的可维护性。通过正确...
Hibernate 支持多种集合类型,如 List、Set、Map 等,它们可以作为一对多或多对多关系的容器。`@ElementCollection` 用于映射非实体类属性的集合,而 `@OrderColumn` 可以指定集合元素的排序方式。 6. **级联操作 ...
在关系型数据库设计中,实体之间的关联关系主要有三种类型:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)。而Hibernate作为一种流行的Java持久层框架,它能够帮助我们更好地管理和操作...
在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系映射是一种常见的数据库交互模式,它用于表示两个实体之间复杂的关系。在这个场景中,一个实体可以与多个其他实体相关联,反之亦然。例如,在学生和课程...
Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将重点探讨`hibernate-core-5.0.11.Final.jar`的核心源码,帮助读者深入...
本次我们将深入探讨的版本是`hibernate-release-5.0.0.Final(1)`,这个版本在Hibernate的生命周期中具有重要的地位,它引入了多项新特性和改进,旨在提升开发效率和性能。 一、Hibernate概述 Hibernate是Java领域中...
通过上述讲解,我们了解了如何在Hibernate中配置和使用一对多映射关系,包括XML映射、注解映射、懒加载、级联操作以及实际应用中的注意事项。希望这些知识能帮助你更好地理解和运用Hibernate进行数据持久化。
`hibernate_one2many_1`和`hibernate_one2many_2`的示例可能分别展示了单向和双向的一对多映射。单向映射意味着只有父类知道子类的存在,而双向则允许双方相互引用。在配置中,这通常涉及到`@OneToMany`注解的使用,...
- ** associations**:支持一对一、一对多、多对一、多对多等关系的映射。 3. **实际应用** - **实体类设计**:根据业务需求定义实体类,并使用Hibernate注解进行映射。 - **配置文件设置**:配置数据库连接、...
正确理解和使用Hibernate的多对多映射机制,能帮助我们更高效地构建和维护复杂的数据关系。同时,对源码的学习和工具的运用,也有助于提升我们对ORM框架的掌握程度,从而更好地服务于软件开发工作。
3. **无连接表的 1:N (一对多) 单向关联** 在单向关联中,一个实体(如 Dept)可以拥有多个实体(如 Emp)。配置 `<set>` 标签在一对一端(Dept),指定键列(deptid)和子类(Emp)。 4. **有连接表的 1:N 单向...
在Hibernate中,多态查询主要依赖于单表映射策略,因为它通过一个共享的表和识别字段实现了对继承结构的支持,从而允许使用更灵活和通用的查询语句。 总结,Hibernate提供了丰富的工具和策略来处理继承关系的映射,...
Hibernate支持多种关联映射,包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)。这些关联可以通过定义外键或使用中间表来实现,使得对象间的复杂关系得以轻松处理。 ...
- 在`Class`类中,由于是一对多的关系,所以不需要特殊的注解。 2. **XML映射文件**: - 对于`Student`实体,我们需要在对应的`.hbm.xml`文件中定义多对一的关系。使用`<many-to-one>`标签,指定关联的实体类和...
【hibernate 多对一映射】是关系数据库与对象模型之间的一种映射机制,是Hibernate框架中的一个重要概念。Hibernate作为一个优秀的Java持久化框架,它允许开发者将数据库操作转化为面向对象的操作,大大简化了数据库...
本主题主要探讨了四种基本的关系映射类型:多对多、一对多、多对一以及一对一。 **一、多对多关系映射** 在数据库中,多对多关系意味着一个实体可以与多个其他实体相关联,反之亦然。在Hibernate中,这种关系通过`...
- **一对多(OneToMany)**: 一个实体类实例对应数据库表的多行记录。 - **多对一(ManyToOne)**: 多行记录对应数据库表的一个实体类实例。 - **多对多(ManyToMany)**: 多行记录对应数据库表的多个实体类实例。 ...
6. **关系映射**:包括一对一、一对多、多对一和多对多的关系,使用@OneToOne, @OneToMany, @ManyToOne 和 @ManyToMany 注解来定义。 7. **懒加载(Lazy Loading)**:一种优化策略,关联的对象在需要时才从数据库...
在提供的链接中,可以找到更多关于Hibernate一对多关联的实例和详细解释,包括如何在XML映射文件中配置这些关系。通过深入学习和实践,开发者能够熟练地在项目中运用Hibernate的一对多关联,提高开发效率和代码质量...
九、多对一、一对多、多对多关系 Hibernate通过外键映射和集合映射处理这些关系,如@ManyToOne、@OneToMany、@ManyToMany等。 十、 Hibenate事件监听器 通过实现特定接口,如PreInsertEventListener,可以定制在...