请给我讲讲在hibernate中,什么时候用“一对多”、“多对一”、“一对一”、“多对多”?
我主要是分不清区分它们的方法,请大家详细讲讲怎么区分,最好举几个例子。这个问题我会加到200分的,如果答案满意我最后还会追加50分。■■■■■■■■■■■■■■■■■■■...
我主要是分不清区分它们的方法,请大家详细讲讲怎么区分,最好举几个例子。这个问题我会加到200分的,如果答案满意我最后还会追加50分。
■■■■■■■■■■■■■■■■■■■
请不要从其它地方复制粘贴
■■■■■■■■■■■■■■■■■■■
. 展开
■■■■■■■■■■■■■■■■■■■
请不要从其它地方复制粘贴
■■■■■■■■■■■■■■■■■■■
. 展开
7个回答
展开全部
一对一就是比如每个人都有且只有一张身份证(排除你的身份证是假冒伪劣啥的),然后必然有且只有一个一个户口本,所以身份证和户口是一对一的关系,你一次查询就可以把一个人的身份证和户口都查询出来,但是由于用途的关系,身份证和户口还是需要用两张表格来存储的。
一对多的情况就是比如一个公司有许多的职员,于是公司和职员的关系就是一对多的,用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学着做,这样对自己也提高的比较快
一对多的情况就是比如一个公司有许多的职员,于是公司和职员的关系就是一对多的,用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看看文档,其中有关系映射这部分,包括了,很多方面的关联,单、双向关联、带第三张表的单双向关联,不再赘述。
这个取决于需求,比如,你的师生管理项目中,客户已经明确规定,在这个项目中,老师可以教多个学生,学生也可以有多个老师,这很明显是m:n就是多对多的关系。如果说做部门与员工这样的表,那么一个部门可以有多个员工,但是,每个员工只能在一个部门工作,这就是一个1:M一对多的关系。到底要用哪种关系,取决于你对客户需求的理解
2.怎么用?
楼主已经表明不要用拷贝,所以推荐楼主去www.hibernate.org看看文档,其中有关系映射这部分,包括了,很多方面的关联,单、双向关联、带第三张表的单双向关联,不再赘述。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一对多:一个购物车可以放多个商品
多对一:多个商品可以放一个购物车
一对一:一个客户可以有一个购物车
多对多:多个客户对应多个商品
hibernate的配置不是很麻烦,基本上你设定好了数据库的表结构,用eclipse自动生成配置文件就可以了,在取值的时候如果是一对多
a.getBs();就获得了多的对象,同样,如果是多对一:b.getA();就获得了A对象.
多对多在实际中不存在.一对一就是普通的表关联.意义不大.
多对一:多个商品可以放一个购物车
一对一:一个客户可以有一个购物车
多对多:多个客户对应多个商品
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实际上可以做到 这样的关联 但这并不是唯一的办法
结合我个人做的实际项目 还可以有办法
运用数据库的主 外键关联 关系复杂可以做中间的影射表(多对多关系)
都给你发了 你看不到?
表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》·对你很有帮助~
一个学生只能有一个学号 这个就是一对一
同一门课可以有很多老师来教,来教这门课的老师同时也可以交很多门课 这个就是多对多
至于多对一 只是一对一的特殊情况
N个学生组成一个班级 那么学生就是多的一端 班级就是一的那端
建议去看看夏析写的《深入浅出Hibernate》·对你很有帮助~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询