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有什么区别?
请朋友们.给说一下,谢谢! 展开
要是能给实例比较最好了,谢谢朋友!
我的意思one to many 要是反过来不就是many to one了吗?
我要是把相关的配置 调换一下.
那么one to many和many to one不就是可以互换了吗?
我是想问,这时候one to many和many to one有什么区别?
请朋友们.给说一下,谢谢! 展开
展开全部
这个很好理解。
从字面意思上看,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的应用也更为防范,这主要是基于一个效率考虑
从字面意思上看,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的应用也更为防范,这主要是基于一个效率考虑
展开全部
补充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没有任何区别.怎么做都可以.
//------------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没有任何区别.怎么做都可以.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多对一(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类型对象的集合),所以说一对多关系是多对一的一个补充,并不是另一种关系模型,多对一该有的操作在一对多中一个都不能少。
一对多(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类型对象的集合),所以说一对多关系是多对一的一个补充,并不是另一种关系模型,多对一该有的操作在一对多中一个都不能少。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你反过来改的话,要出问题了,one to many 是一对多,many to one是多对一。这个是根据你数据映射来的,如果你数据库表里没有设置主外键的话,还是可以的,有时会报一些错..这时你就要还原看看是什么原因造成的,什么原因都有可能哦..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一对多和多对一.一个学生可以有多门课程,一门课程能有多个学生学...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询