- 浏览: 376039 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
有两个类, 一个是User, 一个是Order
一个User可以包含多个Order对象。
==============级联==========
假如有一个User对象user1, 对应有三个Order对象order1,order2,order3
当保存user1时, 按照道理, 这三个Order对象也会被保存起来。
在上面的例子中, 通过
<set name="orders" cascade="save-update" inverse="true">
来设置这个关联。 inverse=true表示由order来维持这个关系。
cascade表示当User进行何种操作的时候, 会关系到对应的set对象。
这里设置的是"save-update",也就是当添加user的时候, 与user对象对应的,
也就是user对象所包含的order对象也会被加入到数据库中, 并与该user对象关联。
但是如果设置成none, 那不管user.setOrder()这里设置进去多少order, 最后都
不会被存入数据库。 被存入数据库的最终就只有user自己。
==============级联==========
源码笔记:
这里的final Type[] types里便是我们的Java对象类型。
org.hibernate.event.internal;
一个User可以包含多个Order对象。
package com.lj.zhang; import java.util.Set; public class User { private int id; private String name; //一对多, 通过该变量可以引用到对应的Order集合对象 private Set<Order>orders; public Set<Order> getOrders() { return orders; } public void setOrders(Set<Order> orders) { this.orders = orders; } public User(int id, String name) { super(); this.id = id; this.name = name; } public User() { // TODO Auto-generated constructor stub } } package com.lj.zhang; public class Order { @Id private int id; private String name; //多对一, 多个order通过引用可以对应到关联的User对象。 private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
==============级联==========
假如有一个User对象user1, 对应有三个Order对象order1,order2,order3
当保存user1时, 按照道理, 这三个Order对象也会被保存起来。
在上面的例子中, 通过
<set name="orders" cascade="save-update" inverse="true">
来设置这个关联。 inverse=true表示由order来维持这个关系。
cascade表示当User进行何种操作的时候, 会关系到对应的set对象。
这里设置的是"save-update",也就是当添加user的时候, 与user对象对应的,
也就是user对象所包含的order对象也会被加入到数据库中, 并与该user对象关联。
但是如果设置成none, 那不管user.setOrder()这里设置进去多少order, 最后都
不会被存入数据库。 被存入数据库的最终就只有user自己。
==============级联==========
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lj.zhang"> <class name="Order" table="test_order"> <id name="id"> <generator class="assigned"/> </id> <property name="name" column="test_name"/> <!-- 告诉hibernate, 多对一映射的对象是什么类型的 --> <!-- 这里的column对应的是User.hbm.xml里的set里面的key column 告诉hibernate这个对象所对应的user的foreign key --> <many-to-one name="user" class="com.lj.zhang.User" column="customer_id"></many-to-one> </class> </hibernate-mapping> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lj.zhang"> <class name="User" table="test_user"> <id name="id"> <generator class="native"/> </id> <!-- length是用于定义数据库里面的字段的长度 --> <property name="name" type="string" length="40" column="test_name"/> <!-- 配置一对多关系要用到set节点 name属性是User类中的属性名称 one-to-many里的class属性告诉了hibernate对应的类, 这样 才可以通过反射生成对象 --> <set name="orders" cascade="save-update" inverse="true"> <!-- 级联, inverse=true表示由多的一方维持关联关系 --> <!-- key的column告诉hibernate多的一方的foreign key --> <!-- 这里设置为customer_id, 就会在数据库的order表里生成相应的 --> <key column="customer_id"></key> <one-to-many class="com.lj.zhang.Order"/> </set> </class> </hibernate-mapping>
源码笔记:
这里的final Type[] types里便是我们的Java对象类型。
org.hibernate.event.internal;
public class DefaultFlushEntityEventListener implements FlushEntityEventListener { public void onFlushEntity(FlushEntityEvent event) throws HibernateException { final Object entity = event.getEntity(); final EntityEntry entry = event.getEntityEntry(); final EventSource session = event.getSession(); final EntityPersister persister = entry.getPersister(); final Status status = entry.getStatus(); final Type[] types = persister.getPropertyTypes(); final boolean mightBeDirty = entry.requiresDirtyCheck(entity); final Object[] values = getValues( entity, entry, mightBeDirty, session );
发表评论
-
Connection is read-only. Queries leading to data modification are not allowed。
2014-04-06 21:52 3724<tx:advice id="txAdvic ... -
org.hibernate.HibernateException: No Session found for current thread
2014-04-06 12:37 0今天在maven中整合spring和hibernate,并使用 ... -
select new Topic from ' Mysql 生成SQL语句错误
2014-03-30 22:51 1655Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1461org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 872今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
自定义OpenSessionInViewer过滤器
2013-12-11 12:12 1056摘自孔浩视频 spring部分-17_spring_SSH整合 ... -
数据库事务 (三)虚读(Phantom Read)
2013-12-01 13:21 0关于各种读 虚读 phantom read: 转自维基 ... -
Hibernate悲观锁
2013-11-30 17:30 0为了防止两个线程同时修改一个数据,造成更新数据丢失,我们可以使 ... -
Hibernate查询HQL实例
2013-11-29 15:56 1293三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate继承映射
2013-11-28 12:36 648继承映射分为三种情况 1.每个子类一张表 比如说有一个Pers ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 1016摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1446摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2455这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate通过Comparator接口自定义排序规则
2013-11-25 20:42 2516摘自圣思园 Hibernate25.自定义内存排序器详解及符合 ... -
Hibernate配置Set和List
2013-11-25 10:44 1878========================Set==== ... -
Hibernate的Map配置
2013-11-23 16:21 1296摘自圣思园022.Hibernate映 ... -
Hibernate多对多配置
2013-11-21 22:39 876场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 591摘自圣思园Hibernate20.一 ... -
Hibernate一对一配置
2013-11-20 21:49 1040摘自圣思园 19.Hibernate的对象检索策略深度解析.a ...
相关推荐
在Hibernate中,关联关系是对象关系映射(ORM)的核心组成部分,它允许我们将数据库的表结构映射到Java对象,并管理这些...在hbm.xml文件中正确地配置这些标签和属性,可以使Hibernate更高效、更灵活地管理对象关系。
在Hibernate的XML映射文件(如.hbm.xml)中,我们使用`<many-to-one>`标签来定义多对一关系。例如: ```xml <many-to-one name="parentEntity" class="com.example.ParentEntity" column="parent_id" /> ``` 这里,...
在Hibernate配置文件(如hibernate.cfg.xml)中,你需要为实体类定义映射文件(如Student.hbm.xml和Course.hbm.xml)。在这些映射文件中,使用`<many-to-many>`标签来定义关系。例如: ```xml <!-- Student.hbm.xml...
在本主题"Hibernate单向一对多关联映射(XML版)"中,我们将深入探讨如何使用XML配置来实现数据库中一个实体类对应多个实体类的关联关系。 在Hibernate中,一对多关联是一种常见的关系映射类型,它反映了数据库中的...
在Hibernate中,我们可以在Java类的映射文件(`.hbm.xml`)中定义多对多的映射。例如,在`Author.hbm.xml`中,我们创建了一个名为`books`的`set`集合,指定其逆向关系(`inverse="true"`),表名(`table="BOOK...
总结来说,Spring和Hibernate结合使用的一对多关联映射,关键在于配置正确的映射文件,设定级联策略,并在业务逻辑中利用这些配置进行数据的增删改查操作。理解并掌握这一技术,能有效提升开发效率,减少手动处理...
本文将更加深入地解析另一种重要的配置文件——`*.hbm.xml`,特别是如何通过此类文件来管理实体与数据库表之间的映射关系,以及处理复杂的关联关系,如一对一、一对多、多对一和多对多。 #### `*.hbm.xml`文件解析 ...
本篇将深入探讨如何在Hibernate中配置多对多关系,特别是通过hibernate.hbm.xml文件进行配置。 一、理解多对多关系 在数据库设计中,多对多关系意味着两个表之间存在复杂的关系,例如,学生可以选修多门课程,而...
### 映射多对多及一对一关系 #### 一、多对多关系映射 在数据库设计中,当两个实体之间存在多对多的关系时,通常会使用一个关联表来维护这种关系。例如,在给定的例子中,`Employees`表和`Roles`表之间的关系即为...
XML映射文件中,`<id>`标签定义了主键,`<property>`标签用于映射普通字段,而`<bag>`标签则表示一对多的关系,如`building2`和`site2`分别对应`BuildingPO`和`SitePO`实体类。 关于数据类型的转换,例如在Oracle中...
在Java世界中,Hibernate是一个非常...总之,Hibernate的多对一映射通过XML配置文件使得Java对象与数据库表之间的关系变得清晰明了,简化了开发过程。理解并熟练运用这一特性,能够帮助你更高效地进行数据访问和操作。
在这个实例中,我们将深入探讨如何在Hibernate中实现这种映射,包括配置XML映射文件、创建数据库表以及编写相关的Java实体类。 首先,我们需要理解一对多映射的基本概念。在关系型数据库中,"一"端通常表示主表,而...
本文将深入探讨Hibernate一对多映射的概念、配置以及实现方式,并结合提供的源代码和测试代码进行详细解析。 一、Hibernate一对多映射基础 1. 概念理解: 在数据库中,一对多关系意味着一个实体(如用户)可以...
级联操作的设置方式有多种,对于一对一和多对一的关系,可以通过`cascade="delete"`或`cascade="all"`,而对于一对多的关系,可以选择`cascade="all-delete-orphan"`或`cascade="all"`。`delete`只在删除父对象时...
对于不使用注解的旧版Hibernate,我们需要在XML映射文件中配置一对一关系。 ```xml <!-- User.hbm.xml --> ... ... <!-- Account.hbm.xml --> ... ... ``` 三、双向关联的注意事项 1. **...
在XML配置文件中,我们通常会在`hibernate.cfg.xml`中定义数据源和SessionFactory,而在实体类对应的`.hbm.xml`文件中设置一对一映射。以下是一个简单的例子: 1. **实体类定义**: - 假设我们有两个实体类:`...
本案例主要探讨的是Hibernate中的一对多关系映射,这是一种常见的对象关系映射(ORM)配置,用于表示一个实体与多个其他实体之间的关联。 在传统的数据库设计中,一对多关系是指一个表(父表)中的记录可以与另一个...
2. **映射文件(hbm.xml)**:描述了实体类与数据库表的映射,以及多对多关联的配置。 3. **配置文件(hibernate.cfg.xml)**:包含数据库连接信息和其他Hibernate配置。 4. **测试类(Test)**:用于执行实际的...