浅析Hibernate映射(二)——关系映射(3)

双向一对一关联映射

与单向一对一关联映射一样,双向映射依然可以采用两种方式实现:1、主键关联;2、唯一外键关联

1、主键关联

映射出的关系模型与单向一样:

映射文件与单向的区别在于:需要在Card加入<one-to-one>标签,指示hibernate将关联对象User根据主键加载上来。<one-to-one>不影响存储,只影响加载

User.hbm.xml

[html] view plaincopyprint?

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="com.jialin.hibernate">
  6. <class name="User">
  7. <id name="id">
  8. <!--采用foreign策略,可以取得关联对象的主键  -->
  9. <generator class="foreign">
  10. <!--property代表要关联的对象 -->
  11. <param name="property">card</param>
  12. </generator>
  13. </id>
  14. <property name="name" />
  15. <one-to-one name="card" />
  16. </class>
  17. </hibernate-mapping>

Card.hbm.xml

[html] view plaincopyprint?

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="com.jialin.hibernate">
  6. <class name="Card">
  7. <id name="id">
  8. <generator class="native" />
  9. </id>
  10. <property name="cardNo" />
  11. <!--<one-to-one>不影响存储,只影响加载-->
  12. <one-to-one name="person" />
  13. </class>
  14. </hibernate-mapping>

2、唯一外键关联

映射出的关系模型与单向一样:

映射文件:

User.hbm.xml

[html] view plaincopyprint?

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="com.jialin.hibernate">
  6. <class name="Person">
  7. <id name="id">
  8. <generator class="native" />
  9. </id>
  10. <property name="name" />
  11. <many-to-one name="card" unique="true"></many-to-one>
  12. </class>
  13. </hibernate-mapping>

Card.hbm.xml

[html] view plaincopyprint?

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="com.jialin.hibernate">
  6. <class name="Card">
  7. <id name="id">
  8. <generator class="native" />
  9. </id>
  10. <property name="cardNo" />
  11. <!--必须指定<one-to-one>
  12. 标签中的property-ref属性为关系字段的名称-->
  13. <one-to-one name="person" property-ref="card"/>

[html] view plaincopyprint?

    1. </class>
    2. lt;/hibernate-mapping>
时间: 2024-10-01 04:43:50

浅析Hibernate映射(二)——关系映射(3)的相关文章

菜鸟学习Hibernate——一对多关系映射

Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创建实体类Classes和实体类Student Classes.java package com.bjpowernode.hibernate; import java.util.Set; public class Classes { private int id; private String nam

Hibernate多对多关系映射

两张表的多对多关系,在数据库中通常是通过第三张中间表来实现的,第三张中间表放的是两张表各自的主键值,通过主键与主键的对应来体现表直接的关系.比如在权限系统中,一个用户可以拥有多种权限,而一种权限也可以授予多个用户. 在持久化对象设计的时候,角色和用户都分别有一个集合来防止拥有它的用户或角色.角色类的设计: public class RolePO { private int id;  private String name;  private Set employees = new HashSet

Hibernate多对多关系映射(建表)

下边讲述Hibernate多对多关系映射. 多对多关系的表的结构为: 两个实体表,还包含一个关系表,关系表为复合主键,如果要使用Hibernate多对多关系映射,则关系表必须只包含两个字段,如果生成了Hibernate多对多关系映射,则中间关系表不会生成实体(即没有对应的pojo类,更没有其映射文件). 1.建立表 DROP TABLE user_course ; DROP TABLE user ; DROP TABLE course ; CREATE TABLE user ( userid  

hibernate的对象/关系映射结果为空,exists查不到值的问题-20190823

1: hibernate的对象/关系映射 情景:在使用@onetotone/@manytonone时关联结果为空 原因:在使用这个注解的时候,默认的时crossjoin(交叉连接),在进行查询时以及排序时用到了注解关联的属性,如果这个属性为空就会导致查空 解决:注意关联过程中使用到的属性一定要存在 拓展: 1 @OneToOne(fetch = FetchType.LAZY)--懒加载2 @JoinColumns({ 3 @JoinColumn(name = "主键", referen

hibernate 多对多关系映射

学生 和 课程就是一种多对多的关系映射,那么再hibernate中,对于多对多关系在怎么配置? 和一些注意的事项?简单测试下. 建表 实体 配置文件和映射 测试 1.使用oracle ,建表sql create table students( id number(7) primary key,   name nvarchar2(20),   age number(2) ) create table course( id number(7) primary key,   name nvarchar

SSH-Hibernate(二)—关系映射(上)

关系映射的理解 上篇博客说过ORM是一种持久化的解决方案,它的思想呢就是将关系数据库中的表的记录映射到JAVA对象中.直白的说就是JAVA对象和关系数据库中的记录建立起了固定的对应关系,对象即记录!这样做的带来的最直接的表现就是,开发人员可以以面向对象的思想来操作关系型的数据库. 对象对应的是数据表中的记录,而在关系数据库中记录和记录之间存在着一对一.一对多.多对多等关系.ORM映射也需要保存这些记录之间的关系,它主要通过面向对象中关联关系来实现,继承关系是比较特殊的一种反应记录之间关系的形式.

Hibernate之实体关系映射

延迟加载与即时加载 例如Person类和Email类是一对多关系,如果设为即时加载,当加载Person时,会自动加载Email,如果设置为延迟加载,当第一次调用person.getEmails()时才会执行SQL语句加载Email 注解配置时,@OnetToMany(Fetch = FetchType.EAGER)为即时加载,Fetch = FetchType.LAZY为延迟加载 延迟加载和即时加载的策略适用于所有一对多.多对一.多对多等所有的实体关系 一般来说,延迟加载要比即时加载节省资源,但

Hibernate初探之单表映射——创建对象-关系映射文件

编写一个Hibernate例子 第三步:创建对象-关系映射文件 以下是具体实现步骤: 找到我们要持久化的学生类Sudents 生成对象-关系映射文档Students.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourcefor

hibernate 一对多 关系映射

在关系中,或多或少的表之间有复杂的关联关系 这里测试 一对多 关联关系的配置 开发步骤就不多说了.直接看一个示例. users 用户 和  shop商品订单表 分析:一个用户可以有多个商品订单,一个订单只属于一个用户. 这样就构成了一对多的关联关系. 这里用的是oracle 数据库 users 和 shop 数据库表 create table users( id number(7) primary key,   name nvarchar2(20),   pass nvarchar2(20),

Hibernate映射(二)——多对一关系映射

上篇学习了Hibernate的基本映射,也就是单表映射,很容易就能理解,但是对于关系数据库来说,表之间存在关系是比不可少的,关系数据库中存在的关系是通过主外键建立起来的,反应到Hibernate要如何通过对象表现呢?下面我们就继续学习Hibernate的对象关系映射. 我们先从最常见的多对一和一对多关系开始: 多对一 所谓多对一,在数据库中即在多的一端添加外键关联到一的一端,比如用户(User)和用户所在组(Group)的关系:一个User只属于一个Group,一个Group有多个Group,并