用户登录
用户注册

分享至

hibernate 关系

  • 作者: 五菱集团驻Z泰协调部
  • 来源: 51数据库
  • 2020-09-24
首先hibernate中的关系分为数据库表的关系和hibernate中对象的关系两个,缺一不可!
当你在创建对象的时候,如果你要保存这两个对象之间的关系,就要在对象中保存另外一个对象的引用。
如:
public class Person{
private String name;
private Address add;
}
public class Address{
private String street;
private String xiaoqu;
}
人对象中保存了地址这个对象的引用,就说明这两个对象存在关系。具体关系分好多种:
一对一、一对多、多对多关系
从方向上又可分:单向关联和双向关联。
上个例子就是单向一对一关联
数据库中你也要有相应的关系结构,这样配置了hibernate的级联关系属性后,hibernate就可以帮助你维护这种关系了。
具体的你可以看看孙卫琴的书。关于hibernate的!
当然hibernate的配置文件中也要配置!
多对多关系,就是两个对像相互保存对方引用。数据库表中有对方表的主键做外键。



  这些主要是在各个表的xml文件中体现
在主键表的xml文件中是many-to-one
在外键表的xml文件中是set



  hibrnate的优点有很多.但在我理解最核心的是将对象直接存到二维的数据库中.
我们的数据库大多是二维表的形式.
而我们写的java确实面向对象.
这样在存到数据库时难免有个思维转换的过程.
有了hibernate就屏蔽掉了这层中间环节.你写好映射文件.
那么你只需要面向对象就行了,怎么存到数据库hibernate会帮你完成.
当然你所写的这些死的关系 就是告诉hibernate这些对象之间存在着怎样的关系
而以后hibernate会按照这种关系映射到二维表中.
因为二维表之间所存在的关系.
很难在没有映射文件的情况下就表达清楚.
所以映射文件中这些关系的作用就这样体现了.

至于单向双向.如2楼所说.
但我做东西的时候.就会想a-->b可不可以查
b-->a可不可以查
而不是想有没有必要让它可以查.
如果不是硬性要求单向.
还是建议双向的.这样灵活些.



  

哎..看上面的说一通..看都看头晕...我就说我理解的吧..

一对一就是一个id对一个对象...这个不用解释吧..

一对多就是一个id对多个对象...这个要解释下..就比如一个班级有多个学生...是包含的意思...

多对一就是多个对一个...就比如多个科目对应一个学生...

多对多就是多个项目对应多个程序员.....额...太通俗了...不太会说..

一对一就one-to-one ...

一对多就one-to-many..在多的hbm文件里定义一个set或者list的标签...来标记这个有多个对象...在一的hbm文件里定义一个属性...来对应着多的那个set标签

多对一就是一对多掉转...

多对多就是基本不用 many-to-many.....

用两个多对一的表来对应一个中间表....如此做到多对多....

额..好像我也说复杂了...谅解吧...自己思考下...其实做下例子就好了....





  这个其实就跟数据库表对应。
1对1的话就比如说 一个学生只有一个准考证,一个准考证号也只对应一个学生。
1对多的话就比如说 一个班级有多个学生,但一个学生只有一个班级。
多对1跟1对多不是一个事情吗? 多个学生对一个班级。
多对多 就像是 一个学生可以修多门课, 一门课也可以有多个学生修。

在hibernate中实现 其实也就是实现 数据库表里面的关系对应。
软件
前端设计
程序设计
Java相关