Hibernate中one to many 和many to one 有什么区别?请朋友们帮帮我.谢谢

Hibernate中onetomany和manytoone有什么区别?请朋友们帮帮我.谢谢要是能给实例比较最好了,谢谢朋友!我的意思onetomany要是反过来不就是ma... Hibernate中one to many 和many to one 有什么区别?请朋友们帮帮我.谢谢
要是能给实例比较最好了,谢谢朋友!
我的意思one to many 要是反过来不就是many to one了吗?
我要是把相关的配置 调换一下.
那么one to many和many to one不就是可以互换了吗?
我是想问,这时候one to many和many to one有什么区别?
请朋友们.给说一下,谢谢!
展开
 我来答
jvm7572
2007-09-25 · TA获得超过783个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:179万
展开全部
这个很好理解。
从字面意思上看,one to many 是一对多,many to one是多对一。很明显就是区别(说实话,楼主问这样的问题,我都觉得很诧异,仿佛问黑与白有什么区别一样)。

从实际开发角度来说,一对多反过来就是多对一。我们以学生和班级为例。学生对班级是many to one,班级对学生就是one to many。
那到底我们配置班级方的one to many,还是配置学生方的many to one呢。这个问题就要看实际开发需求了。

在这个需求中,从经验上可以想象,我们查看班级的时候,并不一定要看到每个学生的信息。因为学生很多。
但我们查看学生的时候,可能想看班级的信息,因为一个学生对应一个班级。在这种情况下,我们当然是配置学生方的many to one,然后做级联操作。以便取出学生时取出对应班级。

而事实上,大多数情况下,many to one比one to many的应用也更为防范,这主要是基于一个效率考虑
little902
2007-09-25 · TA获得超过812个赞
知道小有建树答主
回答量:1162
采纳率:0%
帮助的人:794万
展开全部
补充jvm7572说明一下..Hibernate设置了many to one或者one to many后在你的实体类里面的表现方式是不一样的(具体忘记了.好久没用了)....而且耦合度太高..如果没有特别要求的紧密性质..建议不要用这种关系在Hibernate中...多两行简单的代码.你的性能会提高很多..
//------------p.s.
我感觉你压根没明白1对多和多对1在hibernate中的配置关系...1对多和多对1在建立表关系是比如jvm7572学生和班级就的关系是多对1的.就是1个班级中包含了多个学生.反过来就是多个学生在一个班级中.永远都是学生表中含有班级的主键不可能班级表中出现学生的主键..首先说明下1对多和多对1的意义..减少数据冗余..表明实体和实体之间关系.

在说hibernate中配置. 1对多
<list name="studentId" cascade="all" lazy="true" inverse="true" table="class_table">
<key>
<column name="student_id" not-null="true"/>
</key>
<one-to-many class="Student"/>
</list>

类中编码
private java.util.List<Student> students;
多对1
<many-to-one name="studentClass" not-null="true" class="StudentClass" column="class_id" cascade="save-update,persist" fetch="join"> </many-to-one>
private StudentClass studentClass;
不明白的就在看看书吧.书上说的很明白了...上边的配置和类里面的映射参考吧..是可以互换的.但是看你是操作什么的多了.是操作学生的多,还是操作班级的多..简单操作就乘.数据量大就用jdbc.不要为了简单的编码而忽略了性能.
那么one to many和many to one不就是可以互换了吗?是可以互相转换.但不是可以随便转换的.当且仅当one to many和many to one可以互换时,one to many和many to one没有任何区别.怎么做都可以.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yeschangsha
高粉答主

推荐于2018-04-25 · 关注我不会让你失望
知道顶级答主
回答量:5.2万
采纳率:96%
帮助的人:4141万
展开全部
多对一(many -to-one)
一对多(one- to- many)

多对一以及一对多都是相对于对象模型(虽然这种说法来自于数据库,但我觉得多对一,一对多放在对象上说更合适一点)来说的,相关的两个类是组合关系,重点的内容在于多对一关系,[一对多]是对[多对一]得补充(扩充)。

在关系模型中,只能通过外键约束来表示两张表的这种多对一关系。具体在hibernate中的使用应该是先抽象出多对一的这种关系,也就是说Class类中的students属性可以先不用看(在Student类中抽象出class属性即可),类抽象完成后,在配置hibernate的mapping文件的时候,配上many to one 标签即可(many to one 标签的name 属性同样还是配上Student类中的属性class),配上之后,hibernate就是根据配置自动寻找Class类,并且把Class对应的表中的主键在自己的表中以外键形式存在,单从这一点可以看出hibernate的高级之处,只需要设计好类间的关系(对象模型),相关的表(关系模型)就会被创建。这是从表的创建以及插入数据处分析,从查询出分析,当从Student类对应的表中读出外键(Class表对应的主键)之后,根据mapping文件,hibernate又会去查Class类对应的表,并且构造出class的一个对象,结合刚才本表中的数据,那么查出来后就会是一个完整的Student类的一个对象(三个属性齐全)。
可以看出,hibernate可以帮我们屏蔽和数据库间的交道,只需要简单的配置就可以完成在JDBC中比较复杂的操作。
一对多的关系体现的数据库中其实和刚刚的多对一并没有什么变化,变化发生在Class类中多了一个属性(一个Student类型对象的集合),所以说一对多关系是多对一的一个补充,并不是另一种关系模型,多对一该有的操作在一对多中一个都不能少。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
骑来乃夜忘处1g
2007-09-25 · TA获得超过480个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:90.4万
展开全部
如果你反过来改的话,要出问题了,one to many 是一对多,many to one是多对一。这个是根据你数据映射来的,如果你数据库表里没有设置主外键的话,还是可以的,有时会报一些错..这时你就要还原看看是什么原因造成的,什么原因都有可能哦..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
117168999
2007-09-25 · 超过31用户采纳过TA的回答
知道答主
回答量:152
采纳率:0%
帮助的人:0
展开全部
一对多和多对一.一个学生可以有多门课程,一门课程能有多个学生学...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式