- 浏览: 204018 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (156)
- 职场人生 (6)
- 开发时遇见的问题 (14)
- 技术学习 (13)
- Hibernate开发与实战学习 (10)
- Junit (9)
- 设计模式 (4)
- Lucene (1)
- Log4J (1)
- JBPM (0)
- OA (0)
- Spring (0)
- Struts2 (1)
- Android (2)
- Python (1)
- 生活点点滴滴 (8)
- Java (11)
- JavaScript&Jquery (22)
- Hadoop (1)
- JSP&Servlet (8)
- dom4j (2)
- mysql (2)
- Oracle (7)
- PHP (0)
- Jmeter (1)
- 测试方面的东东 (1)
- 励志文章 (3)
- CSS (4)
- XHTML&HTML (1)
- Linux相关 (7)
- C&C++ (2)
- Unix C (3)
- 开发软件配置及软件应用 (2)
- English Study And Movie Scripts (3)
- My English World (1)
最新评论
-
yingzhixing:
不错不错~~
利用org.springframework.web.util中的HtmlUtils工具类 -
yonguo:
博主能把完整的pom配置贴一下共享吗?
在maven中使用YUI-Compressor -
yan578351314:
我的为什么会出现语法错误呢?一大推错误信息...
在maven中使用YUI-Compressor -
jstenjoy:
什么是JBPM -
疯狂的草儿:
cat_rat 写道我是2010年9月份进入公司的--2010 ...
辞职了,离开了我工作的第一家公司
第八章Hibernate映射多对一关联关系
- 多对一单向关联
1.表与表之间的关联可以分成一对一,一对多,多对一和多对多
2.网络商城中,一个大的商品分类下,又多个小的商品分类,一个小的商品分类下,又多个商品
Product类:
public class Product implements java.io.Serializable { private Integer id; private String name; private Double price; private String decription; public Product() { } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Double getPrice() { return this.price; } public void setPrice(Double price) { this.price = price; } public String getDecription() { return this.decription; } public void setDecription(String decription) { this.decription = decription; } }
Category类:
public class Category implements java.io.Serializable { private Integer id; private String name; private String description; private Set<Product> products = new HashSet<Product>(); public Category() { } public Category(String name, String description) { this.name = name; this.description = description; } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } public Set<Product> getProducts() { return products; } public void setProducts(Set<Product> products) { this.products = products; } }
Category映射配置:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.crazy.Category" table="CATEGORY" schema="SCOTT"> <id name="id" type="java.lang.Integer"> <column name="ID" precision="8" scale="0" /> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="200" /> </property> <property name="description" type="java.lang.String"> <column name="DESCRIPTION" length="4000" /> </property> <set name="products"> <key column="category_id"></key> <one-to-many class="com.crazy.Product"/> </set> </class> </hibernate-mapping>
与Set映射有点儿像
Product映射配置:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.crazy.Product" table="PRODUCT" schema="SCOTT"> <id name="id" type="java.lang.Integer"> <column name="ID" precision="8" scale="0" /> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="200" /> </property> <property name="price" type="java.lang.Double"> <column name="PRICE" precision="6" /> </property> <property name="decription" type="java.lang.String"> <column name="DECRIPTION" length="2000" /> </property> </class> </hibernate-mapping>
- 一对多单向关联
Product与Category是多对一的关系,Product对象维护着Category对象的参考,如果由Category对象维护着多个Product对象的管理,就是一对多单向关联。
Product类:
public class Product implements java.io.Serializable { private static final long serialVersionUID = 1L; private Integer id; private String name; private Double price; private String decription; private Category category; public Product() { } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Double getPrice() { return this.price; } public void setPrice(Double price) { this.price = price; } public String getDecription() { return this.decription; } public void setDecription(String decription) { this.decription = decription; } public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } }
Category类:
public class Category implements java.io.Serializable { private static final long serialVersionUID = 1L; private Integer id; private String name; private String description; private Set<Product> products = new HashSet<Product>(); public Set<Product> getProducts() { return products; } public void setProducts(Set<Product> products) { this.products = products; } public Category() { } public Category(String name, String description) { this.name = name; this.description = description; } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } }
Category映射配置:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.crazy.Category" table="CATEGORY" schema="SCOTT"> <id name="id" type="java.lang.Integer"> <column name="ID" precision="8" scale="0" /> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="200" /> </property> <property name="description" type="java.lang.String"> <column name="DESCRIPTION" length="4000" /> </property> <set name="products"> <key column="category_id"></key> <one-to-many class="com.crazy.Product"/> </set> </class> </hibernate-mapping>
Product映射配置:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.crazy.Product" table="PRODUCT" schema="SCOTT"> <id name="id" type="java.lang.Integer"> <column name="ID" precision="8" scale="0" /> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="200" /> </property> <property name="price" type="java.lang.Double"> <column name="PRICE" precision="6" /> </property> <property name="decription" type="java.lang.String"> <column name="DECRIPTION" length="2000" /> </property> </class> </hibernate-mapping>
- 级联(cascade)
主动方对执行操作时,被关联对象(被动方)是否同步执行同一操作。
<set name="products" cascade="save-update"> <key column="category_id"></key> <one-to-many class="com.crazy.Product"/> </set>
注意:通常来说,在多对一关联和多对多的关联关系中使用级联没有任何意义。级联通常应用在一对多喝一对一的关联中,应用级联可以少写几行代码;否则需要维护级联的操作,需要多写几行代码。同时,cascade属性的save-update是最为常用的。
-
一对多双向关联
Category类:
public class Category implements java.io.Serializable { private Integer id; private String name; private String description; private Set<Product> products = new HashSet<Product>(); public Category() { } public Category(String name, String description, Set<Product> products) { this.name = name; this.description = description; this.products = products; } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } public Set<Product> getProducts() { return this.products; } public void setProducts(Set<Product> products) { this.products = products; } }
Category映射配置:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.crazy.Category" table="CATEGORY" schema="SCOTT"> <id name="id" type="java.lang.Integer"> <column name="ID" precision="8" scale="0" /> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="200" /> </property> <property name="description" type="java.lang.String"> <column name="DESCRIPTION" length="4000" /> </property> <set name="products" inverse="true" cascade="save-update"> <key> <column name="CATEGORY_ID" precision="8" scale="0" /> </key> <one-to-many class="com.crazy.Product" /> </set> </class> </hibernate-mapping>
Product类:
public class Product implements java.io.Serializable { private Integer id; private Category category; private String name; private Double price; private String decription; public Product() { } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public Category getCategory() { return this.category; } public void setCategory(Category category) { this.category = category; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Double getPrice() { return this.price; } public void setPrice(Double price) { this.price = price; } public String getDecription() { return this.decription; } public void setDecription(String decription) { this.decription = decription; } }
Product映射配置:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.crazy.Product" table="PRODUCT" schema="SCOTT"> <id name="id" type="java.lang.Integer"> <column name="ID" precision="8" scale="0" /> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="200" /> </property> <property name="price" type="java.lang.Double"> <column name="PRICE" precision="6" /> </property> <property name="decription" type="java.lang.String"> <column name="DECRIPTION" length="2000" /> </property> <many-to-one name="category" class="com.crazy.Category" outer-join="true"> <column name="CATEGORY_ID" precision="8" scale="0" /> </many-to-one> </class> </hibernate-mapping>
在类的表现上是,我中有你,你中有我。
- 控制反转(Inverse)
在Hibernate中的一对多的单向或者多向关联的情况下,我们可以将"一"方控制权交给"多"方,称为控制反转。
<set name="products" inverse="true"> <key> <column name="CATEGORY_ID" precision="8" scale="0" /> </key> <one-to-many class="com.crazy.Product" /> </set>
发表评论
-
第九章Hibernate映射一对一关联关系
2011-01-27 10:56 815第九章Hibernate映射一对一关联关系 共享主 ... -
第七章Hibernate 组件(component)映射
2011-01-25 17:05 943第七章 Hibernate组件(component)映射 ... -
第六章Hibernate-的集合映射
2011-01-22 09:44 1083第六章Hibernate-的集合映射 Set映射 ... -
第五章Hibernate-OSIV与泛型DAO模式
2011-01-21 14:02 1264第五章Hibernate -OSIV与泛型DAO模式 ... -
第四章Hibernate持久化对象的生命周期
2011-01-21 10:59 773第四章 持久化对象的生命周期 持久化对象生命周期 ... -
第三章标识符属性生成策略与对象识别
2011-01-19 21:56 958第三章标识符属性生成 ... -
第二章Hibernate的核心接口与类
2011-01-14 15:51 892Hibernate中的核心接口与类 Con ... -
hibernate经典问题的经典贴
2009-12-24 09:26 830Starting 我们为什么要学习Hibernate ... -
第一章Hibernate开发与实战学习
2009-12-20 15:29 1235首先要做一下准备工作,即获得所有的jar包和相应的工具。 1 ...
相关推荐
"hibernate_many2many_2"这个文件名可能是指一个关于Hibernate多对多关联的示例或教程的第二部分,可能包含配置文件、Java实体类、映射文件以及相关的测试代码。 **详细知识点:** 1. **实体类定义**:在Hibernate...
例如,@OneToOne 可用于表示一对一关系,@ManyToOne 和 @OneToMany 用于多对一和一对多关系。 4. **外键约束:** 在数据库层面,这些关联通常通过外键实现。Hibernate允许在映射文件或注解中指定外键的生成策略。 ...
在多对一连接表单向关联中,多个实体(子实体)与一个实体(父实体)相关联,这种关联通过第三个表(连接表或关联表)来实现。 **表结构示例**: - **Department表**: - `departmentid`: 主键 - `departmentName`...
### Hibernate映射关联详解 #### 一、理解一对多双向关联关系 在关系型数据库设计中,一对多关联是常见的数据组织方式之一。而在面向对象编程语言中,这种关系则通常通过集合(如Set或List)来实现。本文将重点...
这个标题表明我们要讨论的是Hibernate ORM框架中的一种特定的数据关系映射——一对多双向组合关联。在关系型数据库中,一对多关联意味着一个父实体可以与多个子实体相对应,而双向则表示这种关系是相互的,即父实体...
**四、Hibernate的多对一关系映射** 多对一关系是多的一方持有一的一方的引用,用`@ManyToOne`注解表示。在多的一方中添加对一的一方的引用,并通过`@JoinColumn`指定引用的列。 **五、Hibernate的多对多关系映射*...
7.1 建立多对一的单向关联关系 7.1.1 元素的not-null属性 7.1.2 级联保存和更新 7.2 映射一对多双向关联关系 7.2.1 元素的inverse属性 7.2.2 级联删除 7.2.3 父子关系 7.3 映射一对多双向自身关联...
第7章 常用Hibernate映射配置说明 7.1 hibernate-mapping节点 7.2 class节点定义 7.3 id节点定义 7.4 属性/字段映射配置 第8章 Hibernate工具 8.1 准备工作 8.2 根据数据库定义生成映射文件——MiddleGen ...
7. **一对多、多对一、多对多关系映射**:在chapter02的实践中,你可能遇到实体类之间的一对多、多对一或者多对多关系。Hibernate提供了多种方式来处理这些关系,例如集合映射、联接表等。 8. **懒加载和立即加载**...
9. **一对多、多对一、多对多关系映射**:在数据库中,不同表之间的关联关系需要在实体类中通过注解或XML配置来映射,例如@OneToMany、@ManyToOne、@ManyToMany。 10. **延迟加载和级联操作**:Hibernate的延迟加载...
第十章可能会涉及更复杂的查询技巧,如多对一、一对多、多对多等关联关系的处理。Hibernate提供了多种关联映射方式,例如使用@OneToOne、@ManyToOne、@OneToMany和@ManyToMany注解。这一章还会讨论级联操作,使得在...
第7章 常用Hibernate映射配置说明 7.1 hibernate-mapping节点 7.2 class节点定义 7.3 id节点定义 7.4 属性/字段映射配置 第8章 Hibernate工具 8.1 准备工作 8.2 根据数据库定义生成映射文件——MiddleGen ...
本篇将深入探讨 Hibernate 中的一对一映射关系,并通过实例演示如何在SQL2000数据库环境下实现这一功能,同时附带相关的第三方类库。 【描述】详解: 一对一映射是Hibernate中的一种关联关系,它代表两个实体之间...
“包含数据库表完整的第七章所有知识点”,暗示了这个章节不仅涉及了Hibernate的编程部分,也可能涉及到了数据库设计和表结构的创建,这通常包括实体类的设计、主键的定义、一对多、多对一、一对一和多对多的关系...
7.1 建立多对一的单向关联关系 7.1.1 元素的not-null属性 7.1.2 级联保存和更新 7.2 映射一对多双向关联关系 7.2.1 元素的inverse属性 7.2.2 级联删除 7.2.3 父子关系 7.3 映射一对多双向自身关联...
7.1 建立多对一的单向关联关系 7.1.1 元素的not-null属性 7.1.2 级联保存和更新 7.2 映射一对多双向关联关系 7.2.1 元素的inverse属性 7.2.2 级联删除 7.2.3 父子关系 7.3 映射一对多双向自身关联...
7.1 建立多对一的单向关联关系 7.1.1 元素的not-null属性 7.1.2 级联保存和更新 7.2 映射一对多双向关联关系 7.2.1 元素的inverse属性 7.2.2 级联删除 7.2.3 父子关系 7.3 映射一对多双向自身关联...
Hibernate 支持各种关联映射,如一对一、一对多、多对一和多对多。理解这些关联关系的建立和查询,能够帮助开发者设计出更灵活的数据模型。 8. **缓存机制**: Hibernate 提供了第一级缓存和第二级缓存,以及查询...
7.1 建立多对一的单向关联关系 148 7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子...
- Hibernate支持List、Set、Map等多种集合类型的映射,以便处理一对多或多对多关系。 8. **缓存机制** - Hibernate的缓存分为第一级缓存(Session缓存)和第二级缓存(可配置的缓存插件,如Ehcache)。 - 缓存...