博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于hibernate中多对多关系
阅读量:4566 次
发布时间:2019-06-08

本文共 1942 字,大约阅读时间需要 6 分钟。

关于多对多关系

数据库:在使用多对多的关系时,我们能够使用复合主键。也能够不使用,直接引入外键相同能够实现。
在数据库中使用多对多关系时,须要一个中间表。
多对多关系中的数据库结构例如以下:
表: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();

 
 
 
 
 
 

转载于:https://www.cnblogs.com/zfyouxi/p/4230344.html

你可能感兴趣的文章
字符串的模式匹配中的算法
查看>>
MySQL的学习记录
查看>>
Java语法基础练习2
查看>>
WindowManagerImpl和PhoneWindowManger的区别
查看>>
CSS样式
查看>>
解决sublime text无法安装插件问题
查看>>
Servlet笔记5--设置欢迎页面及HTTP状态码404、500
查看>>
URAL 2080 Wallet
查看>>
Android编程知识点1-Button,ListView
查看>>
Git 笔记二-Git安装与初始配置
查看>>
一步一步使用ABP框架搭建正式项目系列教程之本地化详解
查看>>
python之路_模块与包介绍
查看>>
洛谷P3905 道路重建
查看>>
Pytorch中的squeeze()和unsqueeze()函数
查看>>
Docker概念学习系列之Docker的主要目标(2)
查看>>
openfire3.10.0 在mac10.10.3,jdk1.8中,安装后无法打开的解决方案
查看>>
细说java之编码
查看>>
js随机数
查看>>
【Selenium + Python】自动化测试之发送邮件正文以及附件同时发送
查看>>
mac终端常用命令
查看>>