- 浏览: 6359291 次
- 性别:
- 来自: 一片神奇的土地
文章分类
- 全部博客 (745)
- JQuery (25)
- JS (33)
- 数据库 (59)
- Java基础 (56)
- JSON (8)
- XML (8)
- ireport (7)
- 设计模式 (10)
- 心情 (14)
- freemarker (1)
- 问题 (15)
- powerdesigner (2)
- CSS (15)
- DWR (4)
- tomcat (16)
- Hibernate (12)
- Oracle (7)
- Struts (7)
- Spring (34)
- JSP (23)
- 需学习 (64)
- 工具类库 (63)
- Maven (14)
- 笔试题 (34)
- 源码学习 (31)
- 多线程 (39)
- Android (32)
- 缓存 (20)
- SpringMVC (14)
- jQueryEasyUi (12)
- webservice-RPC (13)
- ant (1)
- ASP.NET (10)
- 正则表达式 (3)
- Linux (15)
- JBoss (1)
- EJB (3)
- UML (2)
- JMS (3)
- Flex (8)
- JSTL (2)
- 批处理 (5)
- JVM (16)
- 【工具】 (16)
- 数据结构 (29)
- HTTP/TCP/Socket (18)
- 微信 (1)
- tomcat源码学习 (15)
- Python (30)
- 主机 (2)
- 设计与架构 (19)
- thrift-RPC (2)
- nginx (6)
- 微信小程序 (0)
- 分布式+集群 (12)
- IO (1)
- 消息队列 (4)
- 存储过程 (8)
- redis (9)
- zookeeper (5)
- 海量数据 (5)
最新评论
-
360pluse:
技术更新,战术升级!Python爬虫案例实战从零开始一站通网盘 ...
Python爬虫实战:Scrapy豆瓣电影爬取 -
18335864773:
推荐用 pageoffice 组件生成 word 文件。
JAVA生成WORD工具类 -
jjhe369:
LISTD_ONE 写道起始地址为163.135.0.1 结束 ...
IP地址与CIDR -
baojunhu99:
private final int POOL_SIZE = 5 ...
使用CompletionService获取多线程返回值 -
LovingBaby:
胡说,javascript 运行时是单线程的,event lo ...
Ajax请求是否可以实现同步
一、多对一进行关联
(多个学生对应同一间宿舍)---学生是主体,宿舍是附体,关联关系<many-to-one>在主体学生中设置,在学生类中设置宿舍类,由于宿舍类只有一个可以直接用类来设置,在映射学生类 (User)中包含宿舍这个类(Room),在映射配置文件(User.hbm.xml)中定义
<many-to-one name="room" column="room_id" cascade="save-update"/>
哪个是主体类就在哪个配置文件定义关联关系.
cascade属性:表示关联对象的持久化,该属性也要设置在主体中,作用就是当主控方执行操作时,关联对象(被动方)是否同步执行同一操作.
cascade的值:all:表示所有情况下都进行级联操作.
none:所有情况下都不进行级联操作
save-update:在执行save-update时进行级联操作.
delete:在执行delete时进行级联操作.
注意:使用cascade自动持久化时,会先检查被关联物件的id属性,未被持久化的物件之id属性是由unsaved-value决定,预设是null,如果您使用long这样的原生型态(primitive type)时,则必须自行指定预设值.
例如:<id name="id" column="ROOM_ID" unsaved-value="0">
<generator class="increment"/>
</id>
如果您不想额外设定unsaved-value资讯,则可以将long改为Long,这可以符合预设的unsaved-value为null的设定 .
二、一对多进行关联
(一个班级对应多个学生)
一的一端:
public class Agent { private Set agentmarkets = new HashSet(0); } <set name="agentmarkets" inverse="true" lazy="true"> <key> <column name="agentid" precision="18" scale="0" not-null="true" /> </key> <one-to-many class="com.techson.himsnanhwa.admin.hibernate.hbm.Agentmarket" /> </set>
多的一端:
public class Agentmarket { private Agent agent; } <many-to-one name="agent" class="com.techson.himsnanhwa.admin.hibernate.hbm.Agent" lazy="false"> <column name="agentid" precision="18" scale="0" not-null="true" /> </many-to-one>
在设立双向关联时,关联由多对一中「多」的哪一方维护,会比由「一」的哪一方维护来的方便,在Hibernate可以藉由inverse来设定,不设定inverse基本上也可以运行,但是效能会较差。
classes.hbm.xml:
<set name="students" inverse="true"
>
<key column="classesId
"/>
<one-to-many class="com.hibernate.Student"/>
</set>
key表明在多的一端增加一个外键classesId
one-to-many表明在哪端 即多的一端即 Student端添加外键
双向关联:
student.hbm.xml:
<many-to-one name="classes" column=" classesId " class="com.Classes"/>
三、在表关联的设计中,不论是一对多还是多对一,都要将关联字段设置在多的那一方。
例如:user表格和room表格,要将关联字段room_id设置在user表格中。
//由一的一端来维护关系 Set studentSet = new HashSet(); for (int i = 0; i < 10; i++) { Student student = new Student(); student.setName("student_" + i); session.save(student); //此时外键为null,当save(classs)时才发出update student set class_id=".." where id=".." 更新外键 studentSet.add(student); } Classes classes = new Classes(); classes.setName("class_1"); //建立对象引用关系 classes.setStudents(studentSet); //重要 session.save(classes);
// 由多的一端来维护关系 Classes classes = new Classes(); classes.setName("class_1"); //先持久化一的一端(产生主键Id) session.save(classes); for (int i = 0; i < 10; i++) { Student student = new Student(); student.setName("student_" + i); //建立对象引用关系 student.setClasses(classes); //重要 //将student持久化 session.save(student); }
http://www.iteye.com/problems/9945
http://hi.baidu.com/ashinehan/blog/item/15a1aa3439d9201990ef39b6.html
四、一对一关联
可以通过2中方式进行关联:
(1)外键关联:在多对一的例子中就是通过外键进行关联的.(增加一个字段)
person.hbm.xml:
<many-to-one name="idCard" cascade="all"
unique="true"
/>
其中unique表示限制一个person有一独有的 idCard,这只是单向的
双向需配置idCard的one-to-one:
idCard
.hbm.xml:
<one-to-one name="person"
property-ref="idCard"
/>
这样就完成了双向的一对一关联
property-ref: 指定关联类的属性名
指根据哪个属性来操作,即根据Person类中的idCard属性
(2)主键关联:两个表的主键使用相同的值,如此一个Person与IdCard就是一对
两个表使用相同的主键,Person表的主键是一个外键,参照IdCard的主键
一对一主键关联默认了级联,因此不会出现瞬时对象异常!
IdCard.hbm.xml:
<class name="IdCard">
<id name="cardId">
<generator class="native"></generator>
</id>
<one-to-one name="person"/>
Person.hbm.xml:
<class name="Person">
<id name="id">
<generator class="foreign
">
<param name="property">idCard
</param>
</generator> //person类的对象属性idCard
</id>
<one-to-one name="idCard" constrained="true"
/>
使用constrained="true"含义:(必须加)
当前主键上存在一个约束
当前主键作为外键,参照了idCard
一对一关联关系的使用
http://book.51cto.com/art/200804/71563.htm
五、多对多关联:
User:int id, String name , Set roles
Role: int id, String name
User到Role的单向关联:
User.hbm.xml:
<set name="roles" table="t_user_role "> //第三方表 t_user_role
<key column="userid">
<many-to-many class="com.hibernate.Role" column="roleid">
</set>
双向关联:
table属性必须和单向关联中的table属性一致
key中的column属性必须和单向关联中many-to-many的column属性一致
many-to-many中的column属性必须和单向关联中key标签的column属性一致
Role.hbm.xml:
<set name="users" table=" t_user_role ">
<key column="roleid">
<many-to-many class="com.hibernate.User" column="userid">
</set>
1
发表评论
-
strust_spring_hibernate的优缺点
2014-10-08 09:41 2761struts框架具有组件的模块化,灵活性和重用性的优点,同时 ... -
Hibernate实现原理 与 缺点
2014-09-26 17:55 10412Hibernate是怎样实现呢?主要是依据反射机制。 ... -
hibernate报错异常总结
2011-06-09 12:22 103251、A collection with cascade=&qu ... -
[转]hibernate的Hql总结
2011-05-27 11:31 17151. 查询整个映射对象所有字段 //直接from查询出来 ... -
一对多里对 set 的排序
2011-05-17 10:28 3736一对多里面对 set 的排序,建议采用以下办法: ... -
[转]使用hibernate所遇到的问题总结
2011-03-26 10:11 741、catalog 我用myEclipse开发,基本上P ... -
Hibernate3的动态条件查询DetachedCriteria
2011-03-09 11:56 17224在常规的Web编程中,有大量的动态条件查询,即用户在网页上 ... -
hibernate中日期问题+日期查询
2011-03-07 18:12 5190Java类中使用Date类型,而其映射文件使用java.sql ... -
小结Hibernate的查询方式(6种)
2011-03-05 13:30 20561、 get() and load() sess ... -
Hibernate底层数据库操作函数BaseDao+具体实例
2011-03-05 13:13 12510List ls = this.getHibernateTe ... -
Hibernate缓存机制
2011-02-21 11:35 1986Hibernate 中提供了两级Cache,第一级别的 ... -
jdbcTemplate.getAllUser
2010-12-22 11:30 871. public List<TaoBaoStore ... -
【需学习】Annotation+表中的父子关系
2010-11-18 17:10 74使用 Annotation 并对 DAO 层封装具有分 ... -
Hibernate习题总结!
2010-11-11 10:50 156一、Hibernate工作原理: ... -
Hibernate学习笔记!
2010-11-09 10:24 2009Hibernate 是一个开放源代码的对象关系映射框架,它对 ...
相关推荐
在数据库中,一对一关系意味着两个表中的每一行都对应另一个表中唯一的一行。在Hibernate中,我们可以通过在实体类的映射文件或使用注解来定义这种关系。 ### 定义一对一关系 1. **共享主键**:这是通过让两个实体...
9. **关联映射**: Hibernate支持一对一、一对多、多对一和多对多等各种关联映射,如`@OneToOne`、`@OneToMany`、`@ManyToOne`和`@ManyToMany`,使得对象之间的关系能自然地体现在数据库设计中。 10. **懒加载和...
在多对多关联中使用,用于指定连接表的详细信息。 #### @MapKeyJoinColumn 用于映射集合类型的属性,当集合的键是一个简单的值时,可以使用此注解来指定键的列名。 #### @ElementCollection 用于将集合属性映射到...
在这个项目中,它可能包含了预先创建的表结构,用于存储分类信息,比如一级分类、二级分类和三级分类的关联数据。 项目提供的JAR包可能包含了Struts2、Hibernate以及其他依赖库的jar文件,这些是运行项目所必需的。...
标题“Hiberante3相关文档”表明了主要讨论的是关于Hibernate3这一持久化框架的资料集合,可能涵盖了多个方面,如查询语言、缓存机制以及数据加载策略。 描述中的“Hiberante3_HQL”提示我们将会涉及到Hibernate...
HQL可以方便地进行复杂的查询,包括关联查询、分组、排序等。例如,如果你有一个`User`类,你可以通过以下HQL查询所有用户: ```java String hql = "from User"; List<User> users = session.createQuery(hql).list...
在数据库中,一对一关联意味着两个表中的每一条记录都对应另一表中的唯一一条记录。在Hibernate中,这种关联可以是单向的,也可以是双向的。单向一对一关联通常只在一个实体类中定义,而双向一对一关联则在两个实体...
在Hibernate中,注解用于标记类、属性以及方法,告知Hibernate如何将它们与数据库中的表和字段对应起来。 3. **主要注解** - `@Entity`: 标记一个Java类为实体类,表示这个类将映射到数据库的一个表。 - `@Table`...
标题中的“Hibernate - one to many - update”指向的是一个关于Hibernate框架中的一对多关联关系在更新操作时的专题。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加关注业务逻辑...
Hibernate通过实体类来表示数据库表,每个实体类对应数据库中的一张表。我们使用注解(@Entity、@Table等)来标记实体类,并通过属性注解(@Id、@GeneratedValue等)定义主键。同时,通过@ManyToOne、@OneToMany等...
- **映射Person类**: 继续使用`Person`类作为示例,介绍如何映射一对一、一对多、多对多等各种关联类型。 - **单向Set-based的关联**: 通过集合类型来表达实体间的单向关联关系。 - **使关联工作**: 解释如何配置...
1. **实体管理**:在Hibernate中,实体是Java类,它们代表数据库中的表。通过使用`@Entity`注解,我们可以将一个Java类声明为实体,并使用`@Table`注解指定对应的数据库表名。此外,`@Id`注解用于标记主键字段,`@...
在给定的“Hiberante lib”压缩包中,包含的jar文件是Hibernate框架运行所必需的库。这些库通常包含了Hibernate的核心API、持久化模型所需的依赖和其他辅助库,使得开发人员能够快速搭建一个基本的Hibernate应用。 ...
在数据库设计中,一对一关系意味着两个表中每一条记录都唯一地对应另一表的一条记录。例如,一个人可能只有一个身份证,而身份证也只属于一个人,这就形成了一个典型的一对一关系。 在Hibernate中,一对一关系映射...
1. 完全面向对象:Hibernate 允许开发者用 Java 对象来表示数据库中的表,使得数据库操作更符合面向对象编程的思维。 2. 数据库无关性:Hibernate 提供了一种抽象层,使得代码可以在不同类型的数据库之间轻松迁移。 ...
1. **持久化模型**:Hibernate 允许开发者用 Java 对象来表示数据库中的记录,通过注解或XML配置文件定义对象与表之间的映射关系。在 Hibernate 3.2 中,注解支持更加完善,使得代码更简洁,减少了XML配置文件的依赖...
Hibernate支持多种关联映射,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)。关联映射通过配置文件或注解指定,可以实现级联操作、懒加载等特性。 七、缓存机制 ...
此外,还要了解一对多、一对一、多对一和多对多等关联关系的映射。例如,@ManyToOne、@OneToMany、@OneToOne和@ManyToMany注解的使用,以及如何处理这些关系的懒加载和立即加载。 查询是Hibernate的另一大重点,...
6. **一对多、多对一、一对一和多对多关系**:在数据库设计中,理解如何建立和管理这些关系对于数据模型的构建很重要。Hibernate提供了便捷的方式来处理这些复杂的关系映射。 7. **缓存机制**:Hibernate支持二级...