关于hibernate中多对多关系
关于多对多关系
数据库:在使用多对多的关系时,我们能够使用复合主键。也能够不使用,直接引入外键相同能够实现。
在数据库中使用多对多关系时,须要一个中间表。
多对多关系中的数据库结构例如以下:
表: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中多对多关系的更多相关文章
- 如何决解项目中hibernate中多对多关系中对象转换json死循环
先写一下原因吧!我是写的SSH项目,在项目中我遇到的问题是把分页对象(也就是pageBean对象)转化为json数据,下面为代码: public class PageBean <T>{// ...
- hibernate 中多对多关系对象集合的保存
多对多关系映射和一对多关系映射开发步骤差不多, 例子如下:员工和项目之间的关系,一个员工可以参与多个项目:一个项目可以有多个开发人员参与.因此是多对多的关系. 1 分析数据表 1.1)员工表 CREA ...
- hibernate中多对多关联
hibernate中多对多关联 “计应134(实验班) 凌豪” 在关系数据库中有一种常见的关系即多对多关系,例如课程和学生的关系,一个学生可以选择多门课程,同时一门课程也可以被多个学生选择, 因此课程 ...
- Hibernate中的映射关系(一对多)
在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...
- 2018.11.1 Hibernate中的Mapper关系映射文件
Customer.hbm.xml 基本的参数都在里面了 <?xml version="1.0" encoding="UTF-8"?> <!DO ...
- Hibernate中多对多的annotation的写法(中间表可以有多个字段)
2011-07-04 6:52 一般情况下,多对多的关联关系是需要中间表的: 情况一:如果中间表仅仅是做关联用的,它里面仅有2个外键做联合主键,则使用ManyToMany(不用写中间表的Model,只 ...
- 【Hibernate】多对多关系的表达
User.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate ...
- XAF中多对多关系 (XPO)
In this lesson, you will learn how to set relationships between business objects. For this purpose, ...
- hibernate之多对多关系
hibernate的多对多hibernate可以直接映射多对多关联关系(看作两个一对多) 下面我们拿三张表来做实例 t_book_hb t_book_category_hb(桥接表) t_catego ...
随机推荐
- [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传
原文 [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传 Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件 ...
- 关于Linux路由表的route命令(转)
查看 Linux 内核路由表 使用下面的 route 命令可以查看 Linux 内核路由表. # route Destination Gateway Genmask Fl ...
- 用Eclipse做Android开发时出现java.lang.NoClassDefFoundError问题
之前有遇到过这个问题,后来解决了,今天又遇到了,但是忘了当时是怎么解决的,费了好长时间,终于又找回解决的方法,现在记录下来,以防以后又遇到. 这个错误出现在我的某一个Activity,但是我反复确认了 ...
- Tomcat提供的安全机制
Tomcat中安全机制 BASIC认证 <login-config> <auth-method>BASIC</auth-method> </login-c ...
- javascript函数的声明,及返回值
<1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>< ...
- 深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)
一.本课程是怎么样的一门课程(全面介绍) 1.1.课程的背景 作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统 ...
- 一些窗口API函数,比如SetForegroundWindow,SwitchToThisWindow
SetForegroundWindowSwitchToThisWindow procedure TApplication.BringToFront;varTopWindow: HWnd;beginif ...
- HDU 4865 Peter's Hobby(2014 多校联合第一场 E)(概率dp)
题意:已知昨天天气与今天天气状况的概率关系(wePro),和今天天气状态和叶子湿度的概率关系(lePro)第一天为sunny 概率为 0.63,cloudy 概率 0.17,rainny 概率 0.2 ...
- hdu 4704 同余定理+普通快速幂
此题往后推几步就可找到规律,从1开始,答案分别是1,2,4,8,16.... 这样就可以知道,题目的目的是求2^n%Mod的结果.....此时想,应该会想到快速幂...然后接着会发现,由于n的值过大, ...
- c++ char_traits模板类的实现!!!
本人写过与此相关的两篇博客,一个是<cstring>头文件的实现,还有一个是<cwchar>的实现.这里的char_traits模板类在此基础上实现. 为了方便.将源码一起封装 ...