- 浏览: 1210908 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (434)
- js (20)
- struts2 (77)
- spring (11)
- hibernate (17)
- ssh整合 (9)
- 程序例子 (4)
- 正则表达式 (8)
- JSP (20)
- IDE (15)
- 数据库 (10)
- 工作经验技巧感悟 (21)
- 程序员的幽默 (4)
- windows设置 (4)
- 名词解释 (4)
- 技术入门 (4)
- jFreeChart (16)
- OGNL (5)
- java基础 (46)
- dwr (4)
- portal (1)
- 示例用到的附件 (0)
- 优秀程序员45个习惯 (1)
- webService (1)
- shell (3)
- ibatis (3)
- 开发工具 (1)
- OS (3)
- xmlbean (2)
- design_pattern (0)
- error (1)
- testng (2)
- python (18)
- hadoop (21)
- mapreduce (9)
- Hive (0)
- HBase (0)
- ubuntu (22)
- 多线程 (7)
- 自我改进 (6)
- 设计模式 (1)
- ssh (2)
- ant (4)
- guake (2)
- 云计算 (9)
- hdfs (3)
- 大数据 (1)
- 电信业务 (1)
- maven (2)
- svn (5)
- UML (1)
- 待处理问题 (2)
- log4j (1)
- css (1)
- LevelDb (0)
- thrift (6)
- 辅助工具 (3)
- 算法 (1)
- tornado (0)
- twisted (1)
- jvm (0)
- 图书 (1)
- 其他 (1)
- oracle (2)
- mvn (1)
- 私人信息 (0)
- nio (1)
- zookeeper (1)
- JavaIO (3)
- mongodb (1)
- java-高级 (6)
- spring-深入 (1)
- tomcat (1)
- quartz (1)
- 面试题 (1)
- redis (3)
- EJBCA (0)
- spring-3.0 (1)
- memcache (3)
- 性能检测 (1)
- android (0)
- 开源项目 (1)
- 将博客搬至CSDN (0)
- 架构之路 (1)
最新评论
-
pjwqq:
“子类对象”都拥有了“父类对象的一个实例的引用”我晕,应该是“ ...
java继承--父类属性的存放位置 -
gwgyk:
关于楼主最后的问题,我想可能是这样:InputFormat默认 ...
eclipse 运行hadoop wordcount -
fanjf:
上述7点基本具备,可惜现在因为项目需要,做管理方面工作!
如何判断自己是否具有成为一名优秀程序员的潜质 -
摸爬滚打NO1:
链接已经失效
Eclipse添加JSEclipse 插件(js插件) -
younglibin:
看了以上7条, 自己 也不知道是否能够对上, 感觉没一点都有那 ...
如何判断自己是否具有成为一名优秀程序员的潜质
单向1——N关联关系的持久化类发生了改变,持久化类里需要使用集合,因为1的一端需要访问N的一端,而N的一端降一级和的形式出现:它只是将前边的用于集合映射的<element.../>元素改为<one-to-many.../>
属性:
- class:指定关联的实体类
- not-found:改属性只能是exception或ignore,指定当从记录参照的主表记录不存在时,hibernate如何处理;默认exception
单向的1——N关联关系:
只需要在1的实体类一端增加Set属性的setter,getter;
无连接表的单向1——N:
eg:
<!-- 映射集合属性,集合元素是其他持久化实体
没有指定cascade属性 -->
<set name="addresses">
<!-- 指定关联的外键列 -->
<key column="personId"/>
<!-- 用以映射到关联类属性 -->
<one-to-many class="Address"/>
</set>
有连接表的单向一对多:
对于有连接表的1——N,不是使用哪个one-to-many 而是使用many-to-many 为了保证当前实体的是 1 的一端,因此要用unique=“true”
eg:
<!-- 映射集合属性,集合元素是其他持久化实体
指定连接表的表名-->
<set name="addresses" table="person_address">
<!-- 指定连接表中参照本表记录的外键列名 -->
<key column="person_id" />
<!-- 使用many-to-many来映射1-N关联,
增加unique="true" -->
<many-to-many class="Address"
unique="true"/>
</set>
双向1——N关联:
对于1——N关联,hibernate推荐使用双向关联,而且不要让1的一端控制关联,使用N的一端控制关联关系;
双向的1——N和N——1是完全相同的两种形式;
两端都需要增加对关联属性的访问:
- N的一端增加引用到关联实体的属性;
- 1的一端增加集合属性;集合元素为关联实体;
eg:
Preson.java
//1-N关联关系,使用Set来保存关联实体
private Set<Address> addresses
= new HashSet<Address>();
Address.java
//保留关联实体的person属性
private Person person;
Preson.hbm.xml
<!-- 映射集合属性,集合元素是其他持久化实体
没有指定cascade属性 -->
<set name="addresses" inverse="true">
<!-- 指定关联的外键列 -->
<key column="person_id"/>
<!-- 用以映射到关联类属性 -->
<one-to-many class="Address"/>
</set>
Address.hbm.xml
<!-- 使用many-to-one映射N-1关联实体 -->
<many-to-one name="person"
column="person_id" not-null="true"/>
无连接表的双向1——N关联:
- N:的一端要增加<many-to-one......./>元素来影射关联属性;
- 1:的一端则需要使用<set../>或<bag../>元素来影射关联属性;在<set.../>或<bag.../>元素里需要增加<key.../>子元素映射外键列,并使用<one-to-many.../>子元素影射关联属性;
底层数据库记录了这种1——N关联关系,实际上只需要在N的一端的数据表里增加一个外键列即可,
这里存在一个问题:
双向映射时<many-to-one.../>元素将用到外键列,
<set.../>元素里的<key.../>子元素也用来映射外键列;
其他的都映射在同一列,所以映射文件应该为这两个元素指定的column属性,并让两个column属性值相同;
通常在多的一端控制关联关系,我们在<set.../>元素中设置 inverse=”true“
eg:
Preson.hbm.xml:
<!-- 映射集合属性,集合元素是其他持久化实体
没有指定cascade属性 -->
<set name="addresses" inverse="true">
<!-- 指定关联的外键列 -->
<key column="person_id"/>
<!-- 用以映射到关联类属性 -->
<one-to-many class="Address"/>
</set>
Address.hbm.xml:
<!-- 使用many-to-one映射N-1关联实体 -->
<many-to-one name="person"
column="person_id" not-null="true"/>
有连接表的双向1——N关联:
有连接表的1——N关联类似于N——N关联
- 1:的一端使用集合元素,然后在集合元素中添加<many-to-many../>子元素,盖子元素映射到关联表在<many-to-many../>中使用unique=”true“ ,在set元素里使用key和many-to-many两个元素,他们也映射连接表的两个列;
- N:的一端则使用<join ../>元素来强制使用连接表,使用key子元素来影射连接表中的外键,使用many-to-one来映射连接表中的关联实体的外键列;
保证join中的key子元素的column属性和set里many-to-many元素的column属性相同;
join里的many-to-one子元素的column属性和set里的key元素的column属性相同;
两端指定的连接表的Table属性不能省略,且属性值必须相同
eg: Preson.hbm.xml: <!-- 映射集合属性,集合元素是其他持久化实体
没有指定cascade属性 -->
<set name="addresses" inverse="true"
table="person_address">
<!-- 指定关联的外键列 -->
<key column="person_id"/>
<!-- 用以映射到关联类属性 -->
<many-to-many class="Address"
column="address_id" unique="true"/>
</set>
Address.hbm.xml:
<!-- 显式使用join元素确定连接表 -->
<join table="person_address">
<!-- key映射外键列 -->
<key column="address_id"/>
<!-- 使用many-to-one映射N-1关联实体 -->
<many-to-one name="person"
column="person_id" not-null="true"/>
</join>
发表评论
-
hibernate 无主键 多表连接 更新数据
2009-12-23 15:23 2244今天遇到一个问题: 客户给了我 3张表; 这三张表 分别是从 ... -
hibernate 没有id属性 怎么更新数据
2009-12-23 14:39 4043今天用hibernate 查了几个 ... -
Hibernate的各种保存方式的区别
2009-10-23 10:03 1016hibernate对于对象的保存提供了太多的方法,他们之间有很 ... -
hibernate继承映射
2009-09-05 11:13 1987A、采用subclass元素的继承映射: 采用这种方 ... -
hibernate映射集合属性
2009-09-02 15:43 1503hibernate映射集合属性通 ... -
hibernate中控制Insert 和 Update 语句的映射属性
2009-08-31 09:36 2948控制Insert 和 Update 语句的映射属性<pr ... -
hibernate映射文件many-to-many元素属性
2009-08-31 08:50 2899N-----N column(可选): 这个元素的外键关键字 ... -
hibernate映射文件property 元素属性
2009-08-31 08:49 3192property 元素 name:映射类属性的名字 ... -
hibernate映射文件many-to-one 元素属性
2009-08-31 08:48 3772many-to-one 元素 属性: name ... -
hibernate映射文件one-to-one 元素属性
2009-08-31 08:47 5825one-to-one 元素 属性: name:映射类 ... -
hibernate映射文件set 元素属性
2009-08-31 08:46 1924set 元素 属性: name:映射类属性的名字 ac ... -
hibernate映射文件id元素属性详解
2009-08-31 08:45 1505id 元素 属性: name: ... -
hibernate映射文件一级子元素详解
2009-08-31 08:44 1572子元素: meta:设置类或属性的元数据属性 subsel ... -
hibernate映射文件class元素属性详解
2009-08-31 08:42 1837class元素 属性: name:持久化类的全名 ta ... -
hibernate映射文件一级子元素属性详解
2009-08-31 08:42 838一级子元素: meta:用于设置类或属性的元数据属性 ty ... -
hibernate映射文件根元素属性详解
2009-08-31 08:40 1201根元素hibernate-mapping 属性: sche ...
相关推荐
在XML映射文件中,`Student.hbm.xml`包含了`<many-to-one>`元素,表示学生对象引用了一个班级对象,通过`classesid`列连接。而`Classes.hbm.xml`则使用了`<set>`和`<one-to-many>`元素,表示班级对象包含一个学生...
在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...
本文将深入探讨Hibernate中一对多(One-to-Many)关系的处理方式,特别是通过外键映射和inverse属性的应用场景。 #### 一对多关系概念 一对多关系在数据库设计中非常常见,它指的是一个实体可以与多个其他实体关联...
`<one-to-many>`元素指定了子实体的类型。 在C#代码中,`User`类会有一个`Orders`属性,它是`Order`类型的集合: ```csharp public class User { public virtual int Id { get; set; } // ...其他属性... ...
在Java的持久化框架Hibernate...综上所述,Hibernate中的One-to-Many映射涉及了映射文件的编写、Domain对象的设计、数据库配置以及CRUD操作。理解并熟练掌握这些内容,将有助于你在实际项目中高效地处理多对一的关系。
3. 在对应的映射文件中,使用`<set>`和`<one-to-many>`或`<many-to-one>`元素配置映射关系。 4. 如有必要,可以考虑将多对多关系转换为一对多,以优化性能和操作性。 理解并熟练掌握这些概念和实践,将有助于在使用...
- `<one-to-one>`、`<many-to-one>`、`<one-to-many>`和`<many-to-many>`:分别用于一对一、一对多、多对一和多对多的关系映射,通过`<class>`元素的嵌套和属性如`inverse`、`cascade`等来控制关系的维护方式和级联...
5. **<many-to-one>**:一对多关系映射,表示一个实体类的某个属性引用了另一个实体类的一个实例。 6. **<one-to-many>**:多对一关系映射,与`<many-to-one>`相反,表示一个实体类的一组实例引用了另一个实体类的...
- **一对一映射**:使用`<many-to-one>`元素表示,如`<many-to-one name="friend" column="friend_id" update="false"/>`。 - **一对多映射**:使用`<set>`元素配合`<one-to-many>`元素表示,例如: ```xml ...
使用 `many-to-one` 元素在子类中定义对父类的引用,同时在父类中使用 `one-to-many` 元素声明子类的集合。外键通常位于子类的表中。例如,一个部门可以有多名员工,部门类可以定义一个 Employee 集合。 3. **多对...
在Java的持久化框架Hibernate中,`One-to-Many`映射关系是对象关系映射(ORM)中常见的一种关联类型。它表示一个实体("One"端)与多个其他实体("Many"端)之间的关系。例如,一个学生可以有多个课程,一个老师可以...
在Java的持久化框架Hibernate中,"Many-to-One"关系是一种常见的关联映射类型,它表示一个实体(类)可以与多个其他实体实例相关联。在这个主题中,我们将深入探讨Hibernate如何处理这种关系,以及如何在实际编程中...
总结一下,Hibernate中的Many to One关联映射涉及实体类的设计、注解的使用以及映射文件的配置。正确地设置这些可以使得Java对象和数据库之间的交互变得简单而高效。在实际项目中,理解并熟练掌握这种映射方式对于...
【标题】"hibernate-one-to-many-uni" 指的是在Hibernate框架下实现的一对多单向关联关系。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。在这个...
例如,我们可以用`<id>`标签来标识主键,`<property>`标签映射普通字段,而`<one-to-one>`, `<many-to-one>`, `<one-to-many>`, 和 `<many-to-many>`则用于描述关联关系。 进一步,Hibernate提供了注解方式进行映射...
可以使用`@OneToOne`注解或在XML文件中定义`one-to-one`元素来实现。 **四、一对多(One-to-Many)映射** 在实体类中,使用`@OneToMany`注解或者在XML中配置`bag`、`list`、`set`等集合类型来表示一对多关系。可以...
这种关联可以通过在 `many-to-one` 元素中添加 `unique="true"` 属性实现。例如,在 Person 类中,有一个 Address 的属性,通过外键 `addressId` 与 Address 表关联,并设置 `unique="true"`,使得 Address 对象只能...
5. `<one-to-one>`, `<many-to-one>`, `<one-to-many>`, `<many-to-many>`:定义不同类型的关联关系。 例如: ```xml <hibernate-mapping package="com.example"> ... <many-to-one name="department...
在映射文件中,使用`one-to-one`元素定义这种关系,指定对方实体的类名和属性名。 2. 一对多关系(One-to-Many): - 一个实体对象可以对应多个其他实体对象的实例,通常在多方的一端使用`List`或`Set`来存储关联...