关于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();

时间: 2024-08-02 02:51:06

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

Hibernate中多对多关系转换

问题来源 在运用SSH架构开发Web应用时,总会遇到表之间一对多.多对一.多对多等等的关系,而对于多对多的关系,在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型:hibernate会为我们创建中间关联表,转换成两个一对多. 问题解决 在此用开发OA项目时角色表和权限之间的多对多关系提供解决问题的建议 例子:角色与权限 (1)先看需求 (2)分析 第一,角色与权限:多对多 一个角色可以有多个权限,一个权限可以被多个角色使用 第二,在角色的增删改查中涉及到了

hibernate中多对多关联

hibernate中多对多关联 “计应134(实验班) 凌豪” 在关系数据库中有一种常见的关系即多对多关系,例如课程和学生的关系,一个学生可以选择多门课程,同时一门课程也可以被多个学生选择, 因此课程与学生的关系就可以看成是多对多的关系,其中课程表的结构如下图所示: 学生表user 在关系数据库中不能直接建立多对多关联,要想建立这种多对多的关系只能借助第三张中间表, 因此为了建立这种多对多的关系我们需要建立第三张表User_course 为了实现表的多对多关联,需要在两个表的Hibernate配

hibernate中的继承关系

  1.       hibernate中的继承关系   代码:   <1>.POJO类:(Person类)   package qau.edu; import java.util.Date; public class Person { //  成员变量: private int id ; private String name ; private Date date ; //  相应的getter和setter方法: public int getId() { return id; } pub

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

在数据库中表和表之间的关系有几种,下面就详细说一下在Hibernate中怎样映射一对多的关系 Hibernate映射一对多的关系,其实就是持久类之间的映射,那如何把持久类关联起来呢??那就用到.hbm.xml文件的<many-to-one>标签了 具体做法如下: 新建一个customer类: package com.jeremy.hibernate.app.example; public class Customer { private Integer customerId; private

关联映射 ---- Hibernate之多对多关系

叙:上一章详细的记录了关联映射中的"一对多|多对一"关系.级联操作.关系的维护等知识点,本章节轻风学习记录的是级联关系中的"多对多"关系: Hibernate的"多对多"级联关系 1. 介绍 在生活中很多关系都是多对多的,比如一个人在公司是技术部的同时也是营销部的(只是个例子),所以,多对对关系是很普遍的,一个对象有多个角色,而一个角色又可以有多个对象,因此最正确的做法是在对象与角色之间创建一个新的表,用来保存对象和角色的主键,方便调用查看相应的

数据库中多对多关系及其实现

事物A中的一条记录可以对应事物B中的多条记录,而事物B中的一条记录也可以对应事物A中的多条记录.例如:学校中,一个班级可以有多名任课老师,而一名老师可以教多个班级.这时,可以引入一个表C来模拟多对多关系. SQL语句: --班级表 create table banji ( banji_id int primary key, banji_num int not null, banji_name nvarchar(100) ) --教师 create table jiaoshi ( jiaoshi_

hibernate中一对多关系模式的设计

hibernate中一对多的关系模式的设计 注解应该交由多的一方维护和管理. 例如:bbs的模块设计 三个表 版块表(category) .主题帖表(topic)和回帖表(msg) 他们之间的对应关系是:一个版块对应多个主题帖,一个主题帖有多个回复贴. 以下是对应的建表语句. CREATE TABLE `category` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) default NULL, PRIMARY KEY (

XAF中多对多关系 (XPO)

In this lesson, you will learn how to set relationships between business objects. For this purpose, the Task business class will be implemented and a Many-to-Many relationship will be set between the Contact and Task objects. You will also learn the

数据库表中多对多关系怎么设计?

(多对多关系)(视频下载) (全部书籍) 马克-to-win:Teacher表:两列id,name.Studnet表: 三列:id,name,ageTeacherStudent表(关系表):三列:id,tid,sid create table TeacherStudent(id int not null,tid int not null,sid int not null); 2) teacher and student:(一个老师可能有多个学生,一个学生可能有多个老师) qixy有两个学生:li