关于多对多关系

数据库:在使用多对多的关系时,我们能够使用复合主键。也能够不使用,直接引入外键相同能够实现。

在数据库中使用多对多关系时,须要一个中间表。

多对多关系中的数据库结构例如以下:

表:Orders

       字段:orderid(主键)、。。。。

表:Users

       字段:usersid(主键),。。。。

中间表: cy_order_user

       字段:cy_order_user主键id

    外键:cy_orderid(引入Orders表)

    外键:cy_usersid(引入Users表)

注意:中间表的外键是须要在实体类相应的配置文件里应用的。所以为了区分,在这里给外键命名时没实用orderid,而是使用cy_orderid。

当使用Myeclipse反转生成相应的实体类时,这时会生成中间的的实体类。而在Myeclipse中配置多对多关系时,并不须要中间表的信息。

所以,将中间表的实体类及配置文件删除。还须要在hibernate.cfg.xml中删除其相应的路径。然后这时须要改动Orders类和Users类中的Set集合的变量名。

由于反转生成的实体类相应关系是针对中间表的,所以须要改动实体类中的Set集合变量。

比如在Orders类中将Set集合的变量名改为user

那接下来还须要在Orders类相应的配置文件里设置其相关属性例如以下:

 <set name="user" inverse="true" table="cy_order_user">

            <key>

                <column name="ordersid" />

            </key>

            <many-to-many class="com.jzlg.po.Users" column="cy_usersid" />

 </set>

针对如上属性须要改动的例如以下:

 <set name="Set变量名" inverse="true" table="中间表表名">

            <key>

                <column name="ordersid" />

            </key>

            <many-to-many class="与之多对多关系的类(包名.类名)" column="中间表引入相应的外键名" />

 </set>

须要注意的是:每一个相应的实体po类的映射文件里配置的属性并非必须的。比如:数据库中可能一张表中有50个字段,可是

其反向生成实体类的映射文件里并不一定须要配置50个属性。能够依据自身的须要进行配置。也就是说一张表50个字段,在其

相应的映射文件也可能就仅仅有5个属性。能够依据自身的须要手动加入或者删除,可是假设不存在这个属性。在进行加入时,数据库这时

则为null。假设查询则也为null。所以在配置时须要依据自身的须要手动加入或者删除。

当我们在数据库中定义了一个默认字段时,这时我们须要在对应的配置文件里配置dynamic-insert="true"例如以下:

 <class name="com.jzlg.po.Users" table="Users" schema="dbo" catalog="shopdbone"  dynamic-insert="true">

 

 createSQLQuery与createQuery的差别 :

 hibernate 中createQuery与createSQLQuery两者差别是:

 前者用的hql语句进行查询,后者能够用sql语句查询

 前者以hibernate生成的Bean为对象装入list返回

 后者则是以对象数组进行存储

 所以使用createSQLQuery有时候也想以hibernate生成的Bean为对象装入list返回,就不是非常方便

 突然发现createSQLQuery有这样一个方法能够直接转换对象

Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);

 XXXXXXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean。

Hibernate中的分页语句能够这么写

session = HibernateUtils.getSession();

      session.beginTransaction();

      Query query = session.createQuery("from User");

      query.setFirstResult(0);//从第一条记录開始

     query.setMaxResults(4);//取出四条记录

     List userList = query.list();

关于hibernate中多对多关系的更多相关文章

  1. 如何决解项目中hibernate中多对多关系中对象转换json死循环

    先写一下原因吧!我是写的SSH项目,在项目中我遇到的问题是把分页对象(也就是pageBean对象)转化为json数据,下面为代码: public class PageBean <T>{// ...

  2. hibernate 中多对多关系对象集合的保存

    多对多关系映射和一对多关系映射开发步骤差不多, 例子如下:员工和项目之间的关系,一个员工可以参与多个项目:一个项目可以有多个开发人员参与.因此是多对多的关系. 1 分析数据表 1.1)员工表 CREA ...

  3. hibernate中多对多关联

    hibernate中多对多关联 “计应134(实验班) 凌豪” 在关系数据库中有一种常见的关系即多对多关系,例如课程和学生的关系,一个学生可以选择多门课程,同时一门课程也可以被多个学生选择, 因此课程 ...

  4. Hibernate中的映射关系(一对多)

    在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...

  5. 2018.11.1 Hibernate中的Mapper关系映射文件

    Customer.hbm.xml 基本的参数都在里面了 <?xml version="1.0" encoding="UTF-8"?> <!DO ...

  6. Hibernate中多对多的annotation的写法(中间表可以有多个字段)

    2011-07-04 6:52 一般情况下,多对多的关联关系是需要中间表的: 情况一:如果中间表仅仅是做关联用的,它里面仅有2个外键做联合主键,则使用ManyToMany(不用写中间表的Model,只 ...

  7. 【Hibernate】多对多关系的表达

    User.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate ...

  8. XAF中多对多关系 (XPO)

    In this lesson, you will learn how to set relationships between business objects. For this purpose, ...

  9. hibernate之多对多关系

    hibernate的多对多hibernate可以直接映射多对多关联关系(看作两个一对多) 下面我们拿三张表来做实例 t_book_hb t_book_category_hb(桥接表) t_catego ...

随机推荐

  1. Android核心基础(十一)

    1.Android的状态栏通知(Notification) 通知用于在状态栏显示消息,消息到来时以图标方式表示,如下: //获取通知管理器 NotificationManager mNotificat ...

  2. css概述

    前言 1.CSS    cascading   stylesheet  级联样式表 ,外观显示(页面内容显示的方式).CSS文档以.css作为后缀    2.w3c推荐页面文件定义      数据和结 ...

  3. 【从零开始,从内核驱动驱动到用户空间调用】编写第一个linux驱动,通过端口访问I/O寄存器。

    目的: 通过I/O端口方式访问RTC的秒寄存器: 由于本人从来没看过linux方面的书籍,也只是会在终端用些常用的命令而已,这次老大叫我学着通过I/O端口方式直接去读写寄存器.于是我在google中搜 ...

  4. Android 它们的定义View视图

    创建一个新视图将满足我们独特UI需求. 本文介绍的发展将指南针罗盘接口使用UI,通过继承View定义自己的视图类工具,为了深入了解自己的自定义视图. 实现效果图: 源码: 布局文件activity_m ...

  5. [置顶] 浅谈Android的资源编译过程

    Android APK 一.APK的结构以及生成 APK是Android Package的缩写,即Android application package文件或Android安装包.每个要安装到Andr ...

  6. QT+vs2010下改变可执行程序的图标

    原地址:http://blog.163.com/tijijun@126/blog/static/6820974520134209457308/ 在解决方案下面的工程里,点击右键 ->选择[添加( ...

  7. Delphi - SEH研究

    技术交流,DH讲解. 前几天一个朋友在弄游戏外挂想带NP调试,就像自己来捕获游戏的异常.好像就要用到SEH这方面的知识.一起研究了一下,这里看下研究 和 在网上找的资料吧.SEH就是Structure ...

  8. Mac os 进行Android开发笔记(2)

    Mac OS X 下开发 Android  1> MAC OS Android环境搭建: 2>MAC OS  配置 Andoid ADB: 3>MAC OS 上进行Android真机 ...

  9. 首款符合PICO-ITX规格的A20开源硬件开发平台

    http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NzM0MjcyMQ==&appmsgid=10001083&itemidx=2&am ...

  10. uva 1390 - Interconnect(期望+哈希+记忆化)

    option=com_onlinejudge&Itemid=8&page=show_problem&category=514&problem=4136&mosm ...