请给我讲讲在hibernate中,什么时候用“一对多”、“多对一”、“一对一”、“多对多”?
答案:6 悬赏:80
解决时间 2021-02-15 10:21
- 提问者网友:醉人眸
- 2021-02-14 21:19
请给我讲讲在hibernate中,什么时候用“一对多”、“多对一”、“一对一”、“多对多”?
最佳答案
- 二级知识专家网友:留下所有热言
- 2021-02-14 22:23
1.什么时候用?
这个取决于需求,比如,你的师生管理项目中,客户已经明确规定,在这个项目中,老师可以教多个学生,学生也可以有多个老师,这很明显是m:n就是多对多的关系。如果说做部门与员工这样的表,那么一个部门可以有多个员工,但是,每个员工只能在一个部门工作,这就是一个1:M一对多的关系。到底要用哪种关系,取决于你对客户需求的理解
2.怎么用?
楼主已经表明不要用拷贝,所以推荐楼主去www.hibernate.org看看文档,其中有关系映射这部分,包括了,很多方面的关联,单、双向关联、带第三张表的单双向关联,不再赘述。
这个取决于需求,比如,你的师生管理项目中,客户已经明确规定,在这个项目中,老师可以教多个学生,学生也可以有多个老师,这很明显是m:n就是多对多的关系。如果说做部门与员工这样的表,那么一个部门可以有多个员工,但是,每个员工只能在一个部门工作,这就是一个1:M一对多的关系。到底要用哪种关系,取决于你对客户需求的理解
2.怎么用?
楼主已经表明不要用拷贝,所以推荐楼主去www.hibernate.org看看文档,其中有关系映射这部分,包括了,很多方面的关联,单、双向关联、带第三张表的单双向关联,不再赘述。
全部回答
- 1楼网友:你把微笑给了谁
- 2021-02-15 03:41
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实际上可以做到 这样的关联 但这并不是唯一的办法
结合我个人做的实际项目 还可以有办法
运用数据库的主 外键关联 关系复杂可以做中间的影射表(多对多关系)
都给你发了 你看不到?
- 2楼网友:如果这是命
- 2021-02-15 03:22
一对一就是比如每个人都有且只有一张身份证(排除你的身份证是假冒伪劣啥的),然后必然有且只有一个一个户口本,所以身份证和户口是一对一的关系,你一次查询就可以把一个人的身份证和户口都查询出来,但是由于用途的关系,身份证和户口还是需要用两张表格来存储的。
一对多的情况就是比如一个公司有许多的职员,于是公司和职员的关系就是一对多的,用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学着做,这样对自己也提高的比较快
- 3楼网友:飘零作归宿
- 2021-02-15 02:11
首先你要了解 数据库表与表之间的关系,最基本的主外键关系!
如 一个购物系统
user表
user_id 1001
user_name 张三
buy表(购物车表)
buy_id(单号ID) B001
shop_id(商品ID) S001
user_id (用户ID) 1001
....
可见 一个用户张三的购物车可以对应多个购买的商品这称为1对多
反过来看.购物车中各种张三购买的商品就是多对1的关系
而我生成订单之后张三与订单ID之间就是1对1的关系,因为订单ID是唯一的是属于张三一人的
而多对多我的理解也不是太深刻,我认为从这个案例来看就是多个商品对应多个人的关系.
其实简单的看如果我们在建立数据库的时候把表与表之间的关系建立完善
在Eclipse中配置Hibernate时有一个选项 A->B B<-A 把这2个选项勾选上.
Hibernate会自动配置关系的
纯属个人理解~技术有限。谅解
- 4楼网友:我的任性你不懂
- 2021-02-15 01:01
一个老师教一个班的学生 这个就是一对多
一个学生只能有一个学号 这个就是一对一
同一门课可以有很多老师来教,来教这门课的老师同时也可以交很多门课 这个就是多对多
至于多对一 只是一对一的特殊情况
N个学生组成一个班级 那么学生就是多的一端 班级就是一的那端
建议去看看夏析写的《深入浅出Hibernate》·对你很有帮助~
- 5楼网友:甜野猫
- 2021-02-14 23:42
一对多:一个购物车可以放多个商品
多对一:多个商品可以放一个购物车
一对一:一个客户可以有一个购物车
多对多:多个客户对应多个商品
hibernate的配置不是很麻烦,基本上你设定好了数据库的表结构,用eclipse自动生成配置文件就可以了,在取值的时候如果是一对多
a.getBs();就获得了多的对象,同样,如果是多对一:b.getA();就获得了A对象.
多对多在实际中不存在.一对一就是普通的表关联.意义不大.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯