zoukankan      html  css  js  c++  java
  • hibernate单向关联与双向关联的区别(原)

    今天看着hibernate的关联关系,有点迷糊。这里通过多对一表述一下双向与单向的区别。

    多对一:

    就是A表中的一个字段是B表的主键。多个A表中的数据可以对应一个B表中的数据,同理,一个B表中的数据可以同时对应多个A表中的数据。

    单向关联与双向关联对数据表的要求其实是一致的。满足对应的关联要求即可,也就是A表中的一个字段是B表中的主键。

    单向关联与双向关联的需求是不一样的。单向关联,只需要可以通过主表找到控表即可。这个很简单,通过简单的sql语句,select B from A where A.B=?即可。需要的配置也很简单,在A表的持久化类的映射文件中加入:

    <class ......>
       <id....>
       ......
       <many-to-one name="B" class="com.bean.B">
           <column name="B"/>  <!--这个B是A表中B表的主键对应的外键名-->
       </many-to-one>
    </class>

    双向关联的需求是:能够通过A表找到B表,通过B表找到A表。怎么实现呢?

    我们可以知道,单存的B表数据找到的是一批A表的数据,也就是A表数据对象的集合,当然,改变的不是数据库中的表,而是持久化类。B表的持久化类中加入一个A表的Set集合,将查询到的与B有关的数据放入该集合中,之后就可以通过其他的条件得到我们想要的对应A的信息了。

    做法:

    1、B持久化类中饭加入A的set集合以及对应get set方法

    2、在B表的映射文件中加入Set信息以及一对多信息:

    <set name="As" inverse="true">
      <key column="B.id"/>
      <on-to-many class="com.bean.A"/>
    </set>

    之后就可以通过一系列的操作实现我们的需求了!

  • 相关阅读:
    ECSHOP 2.5.1 二次开发文档【文件结构说明和数据库表分析】
    ECSHOP后台左侧添加菜单栏
    PHPstudy 2018 集成环境项目配置虚拟域名访问
    微擎左侧模块业务菜单修改
    ThinkPHP5使用阿里云OSS图片上传
    ThinkPHP5使用PHPExcel实现数据导出功能
    ThinkPHP5生成二维码图片与另一张背景图片进行合成
    原生PHP连接MySQL数据库
    数组的冒泡排序
    【原创诗歌】读仓央嘉措(下)
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5391673.html
Copyright © 2011-2022 走看看