请给我讲讲在hibernate中,什么时候用“一对多”、“多对一”、“一对一”、“多对多”?

作者&投稿:夷建 (若有异议请与网页底部的电邮联系)
hibernate注解配置一对多,多对一,多对多,一对一~

你的理解完全正确。hibernate的一对一配置,有两种方式,你所用的方式是属于第二种,就是采用多对一的理论方法去变相地配置一对一。

首先我要告诉你,数据库描述表之间的关系是通过外键描述的,hibernate中是通过属性描述的。
外键是什么意思?举个例子说,数据库中,你有个表是学生表,
我们简单点说有三列,一个是学生的id,一个是姓名,一个是班级的id
而在数据库中,你会建一个班级表,
其中有id和班级的名称,比如计算机三班,二班等等。
班级和学生,班级是一,学生是多。
而在hibernate中,为了简单起见,一般会在学生类中将班级属性设置成一个班级类,而在班级类中额外添加一个list或者set。这么做的好处简单来说,是为了方便。
怎么方便呢?
这么说吧,比如我们没这么设置,而是在学生类中只有一个班级的id,那么你查到一个学生,想看他班级的名称,是不是还要根据班级的id,去班级表查找对应的名字,这么一来,就会十分麻烦,所以在hibernate中,如果表中有外键,那么一般会将这个外键设置成那个表的实体类,这样一来,我们就不需要多那一步了。
至于你说为什么将属性设置到班级的对象,然后保存学生的信息,学生表中就有班级id这个字段的值了,这个问题,很简单,因为你不仅把属性保存到班级对象中了,你肯定还把这个班级对象作为属性设置给学生了,所以就有了。
换句话说,你等于还是间接的设置了班级id,这个字段,具体他们的对应关系,自然是在配置文件中显示的。
不知道说了这么多,你能理解不。
手酸了,,,,希望对你有帮助。。。

一对一就是比如每个人都有且只有一张身份证(排除你的身份证是假冒伪劣啥的),然后必然有且只有一个一个户口本,所以身份证和户口是一对一的关系,你一次查询就可以把一个人的身份证和户口都查询出来,但是由于用途的关系,身份证和户口还是需要用两张表格来存储的。
一对多的情况就是比如一个公司有许多的职员,于是公司和职员的关系就是一对多的,用hibernate,职员就是公司的一个set字段,比如
Class company{
private string companyName;
private set Employees;
...}
你一次查询公司Company company=hibernatedao.queryCompany(id);
然后可以company.getEmployees()得到他的所有雇员,这就是一对多的好处

多对多举个例子就是订单和商品的关系,一张订单可以有许多商品,一个商品可以从属多个订单,所以他们之间是双向关联的关系,各自的类都有对方的集合(set),好处和一对多差不多,不过多对多一般要有一张中间表来存储他们之间的关联关系,比如 订单1---牙刷 订单1---毛巾 订单2---牙刷,其实多对多是比较复杂的,推荐能不用多对多尽量不用
我讲的都是概念上的东西,如果要研究代码,楼主最好去找hibernate1对1,1对多的demo学着做,这样对自己也提高的比较快

1.什么时候用?
这个取决于需求,比如,你的师生管理项目中,客户已经明确规定,在这个项目中,老师可以教多个学生,学生也可以有多个老师,这很明显是m:n就是多对多的关系。如果说做部门与员工这样的表,那么一个部门可以有多个员工,但是,每个员工只能在一个部门工作,这就是一个1:M一对多的关系。到底要用哪种关系,取决于你对客户需求的理解
2.怎么用?
楼主已经表明不要用拷贝,所以推荐楼主去www.hibernate.org看看文档,其中有关系映射这部分,包括了,很多方面的关联,单、双向关联、带第三张表的单双向关联,不再赘述。

一对多:一个购物车可以放多个商品
多对一:多个商品可以放一个购物车
一对一:一个客户可以有一个购物车
多对多:多个客户对应多个商品
hibernate的配置不是很麻烦,基本上你设定好了数据库的表结构,用eclipse自动生成配置文件就可以了,在取值的时候如果是一对多
a.getBs();就获得了多的对象,同样,如果是多对一:b.getA();就获得了A对象.
多对多在实际中不存在.一对一就是普通的表关联.意义不大.

1。一对多
表1 用户表 表2 信息表
表1 结构 id userName
表2 结构 id userId content
数据 表1 id userName
1 大毛
表2 id userId content
1 1 你好
2 1 你好哇
看下数据就能发现关系
这样的关系就是一(表1中的ID)对多(表2中的userId)
2。多对一 个人感觉和上面一样
假如你在表一中设置的关系是一对多 那么在表2中关系就是多对一
3。一对一
你可以理解为一个对应一个 这个不做多余的解释
4。多对多
在处理用户和角色时常常被用到
一个用户可以有多个角色 一个角色又可以被多个用户使用
这样的关系就是多对多

以上都是按我自己的理解说的
然后有些小的方法和大家分享下
Hibernate实际上可以做到 这样的关联 但这并不是唯一的办法
结合我个人做的实际项目 还可以有办法
运用数据库的主 外键关联 关系复杂可以做中间的影射表(多对多关系)

都给你发了 你看不到?

一个老师教一个班的学生 这个就是一对多
一个学生只能有一个学号 这个就是一对一
同一门课可以有很多老师来教,来教这门课的老师同时也可以交很多门课 这个就是多对多

至于多对一 只是一对一的特殊情况
N个学生组成一个班级 那么学生就是多的一端 班级就是一的那端

建议去看看夏析写的《深入浅出Hibernate》·对你很有帮助~


什么叫业务逻辑
通俗来讲:就是把业务需求按照一定的逻辑关系分成几块方面,比如先有什么然后有什么,最后有什么郸这里强调要有逻辑性,不能乱来,否者业务无法正常进行。问题四:在java开发中什么是业务逻辑? 业务逻辑就是处理数据的逻辑啦。一般后台代码也分三层 action(controller) service DAO (这里的三层不是MVC)...

密码区块链论文怎么写?
我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。 在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。 在此更要感谢我的导师和专业老师,是你们的细心指导...

java 工作 学习
。大的方向得有,不过具体细节还得走着瞧~不过我感觉在中国来讲当下最赚钱的还是游戏程序员和手机程序员,而手机程序员会越来越火爆。。。一开始干的话能在一家氛围好一点的小公司干是进步是非常快的,因为学到的东西非常多,通常都是身兼多职,前期需求分析、开发、建库、与用户接触交流反馈需求等等等...

业务逻辑是什么?
放下电话的刹那,我明白很多代码其实是白写了,然后就是修改。以前自己好象更看重的是所谓的技术能力,spring,struts,hibenate,webwork,报表,邮件,设计模式等等。现在觉得好象并不是这么一回事,客户并不会管你具体是用了hibenate或是JDBC,他们关心的是他们的业务流程能否实现。从这种意义上说,好的沟通能力和分析能力也...

区块链论文做什么,区块链论文做什么题目
构建基于分层身份的加密(HIBE)的前向安全签名,并增加了在同一消息上安全地聚合签名以及生成没有可信集的公共参数的能力。以实现: 1、生成与更新密钥 2、防止恶意密钥攻击的安全性 3、无效的信任设置 对于常见的后攻击有两种变体: 1、短程变体:对手试图在共识协议达成之前破坏委员会成员。解决:通过假设攻击延迟长于共...

业务逻辑是什么
和以前不同的是,这次我更多的参与了业务逻辑分析的过程。和客户面谈,了解他们的需求,常常是在做程序的时候才发又忽略了什么问题,然后再拿起电话。这个反复的过程让人觉得烦琐而又无趣。放下电话的刹那,我明白很多代码其实是白写了,然后就是修改。以前自己好象更看重的是所谓的技术能力,spring,struts,hibenate,web...

信阳市15192024829: 请给我讲讲在hibernate中,什么时候用“一对多”、“多对一”、“一对一”、“多对多”? -
叔治哈力: 1.什么时候用? 这个取决于需求,比如,你的师生管理项目中,客户已经明确规定,在这个项目中,老师可以教多个学生,学生也可以有多个老师,这很明显是m:n就是多对多的关系.如果说做部门与员工这样的表,那么一个部门可以有多个员工,但是,每个员工只能在一个部门工作,这就是一个1:M一对多的关系.到底要用哪种关系,取决于你对客户需求的理解 2.怎么用? 楼主已经表明不要用拷贝,所以推荐楼主去www.hibernate.org看看文档,其中有关系映射这部分,包括了,很多方面的关联,单、双向关联、带第三张表的单双向关联,不再赘述.

信阳市15192024829: 在Hibernate中为什么需要进行关联映射?有哪几种关联映射. -
叔治哈力: 关联映射就是将关系数据库中表的数据映射为java中的对象,以对象的形式表示,这样可以把对数据库的操作转化为对对象的操作.Hibernate有7中映射关系:1、单向一对一关联映射2、 单向多对一关联映射(many-to-one) 3、 单向一对多关联映射(one-to-many)4、 单向多对多映射(many-to-many)5、 双向一对一关联映射6、 双向一对多关联映射(非常重要)7、 双向多对多关联映射 PS:以上也是我从网上搜的然后总结的,网上很多,自己搜一下,认真看看就知道了

信阳市15192024829: 在hibernate中,session的作用是什么,怎么用呢,谢谢各位大虾了. -
叔治哈力: 不用框架,纯java代码操作数据库用的是jdbc,代码量太多 用hibernate则是简化了原先的jdbc操作数据库时——增删改查,需要写大量sql语句的弊端 因此,hibernate就用session的一些方法来代替原先的增删改查操作:例如 session.save();...

信阳市15192024829: hibernate好处 -
叔治哈力: 我来通俗一点说呵呵:Hibernate最大的好处就是允许你的代码以对象模式来访问数据库内容,比如通常我们找一个User的资料需要select出所需要的资料,而通过hibnate我们可以把这个User的资料作为一个对象来看待,通过User.getName()...

信阳市15192024829: hibernate中get和load的区别 -
叔治哈力: Get: (1)不支持延迟加载即执行get()方法的时候就发Select语句 (2)当在数据库中查不到记录的时候不会抛出异常,会返回一个null; Load: (1)支持延迟加载即需要用到记录数据的时候在发Select语句; (2)当在数据库中查不到记录的时候会抛...

信阳市15192024829: 谁能给我解释一下hibernate的懒加载机制?说说这个机制的运作过程 -
叔治哈力: 比如有一张学生表,一张班级表,一张年级表 一位学生,他会有学生信息,也会有班级信息,也会有年级信息.在用hibernate的情况下,他们之间就会存在关联映射关系,在默认情况下,我们在执行查询学生信息的时候,hibernate会把学生的所有信息包括班级和年级信息全部一下查出来,但有些信息并不是我们想要的.所以延迟加载就是为做这事的.我们并不需要的数据我们就不加载,当我们在真正需要他的时候,才去把它加载出来.

信阳市15192024829: hibernate中对象的几种关系能够讲解下吗?
叔治哈力: 1.一对多:就是一的一方知道多的一方,而多的一方不知道一的一方 2.多对一:同上相反 3.一对一:大家都知道大家 4.多对多:建议分成3个表.实现两个多对一. 建议:在数据库里多的一方会存储着一的一方的一个外键,在类里就该把它换成一的一方的一个对象了... 不太会说...不明白就去查下吧....

信阳市15192024829: hibernate中是什么是主对象什么是从对象?求详解??
叔治哈力: 和数据库关系模型中的概念相当.在关系数据库中,有1对n关系,其中1称为主表;n称为从表.即第一个表的单条记录可以关联到第二个表中的多条记录,但是,第二个表中一个单条记录只能够关联到第一个表中的一条记录.举例,t_grade 和t...

信阳市15192024829: 如何理解hibernate中的持久化问题? -
叔治哈力: 所谓的持久是站在业务模型的角度说的.按照面向对象的分析设计方式,我们先根据业务的形状画出一个对象模型,然后写代码,然后对象之间互相调用,系统就运行起来了.面向对象很牛b,但是有一个巨大的问题,就是所有的对象都是在计...

信阳市15192024829: Hibernate中Session什么意思 -
叔治哈力: 一.主配置 ◆查询缓存,同下面讲的缓存不太一样,它是针对HQL语句的缓存,即完全一样的语句再次执行时可以利用缓存数据.但是,查询缓存在一个交易系统(数据变更频繁,查询条件相同的机率并不大)中可能会起反作用:它会白白耗费...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网