hibernate 多对一,一对多,多对多, 在JAVA中怎么理解呢?
在JAVA中已经生产了映射文件...当我看映射文件的时候...看了几天都没搞明白这个多对一,一对多...多对多的关系....如果说完全不懂...但是我对数据库的主外键的关...
在JAVA中已经生产了映射文件...当我看映射文件的时候...看了几天都没搞明白这个多对一,一对多...多对多 的关系....如果说完全不懂...但是我对数据库的主外键的关系...以及这些关系的意思我都明白...就是搞不明白映射文件...比如说多对一...“多”这个实体属性里面居然有“一”的实体对象...替换了以前在数据库中的外键...在保存数据的时候...往数据库插入东西..把“多”这个实体对象里面“一”的这个属性,直接赋予“一”的对象...然后保存之后 在数据库中的“多”的这张表里面的外键ID 既然有值了?搞不明白呀..
展开
展开全部
首先我要告诉你,数据库描述表之间的关系是通过外键描述的,hibernate中是通过属性描述的。
外键是什么意思?举个例子说,数据库中,你有个表是学生表,
我们简单点说有三列,一个是学生的id,一个是姓名,一个是班级的id
而在数据库中,你会建一个班级表,
其中有id和班级的名称,比如计算机三班,二班等等。
班级和学生,班级是一,学生是多。
而在hibernate中,为了简单起见,一般会在学生类中将班级属性设置成一个班级类,而在班级类中额外添加一个list或者set。这么做的好处简单来说,是为了方便。
怎么方便呢?
这么说吧,比如我们没这么设置,而是在学生类中只有一个班级的id,那么你查到一个学生,想看他班级的名称,是不是还要根据班级的id,去班级表查找对应的名字,这么一来,就会十分麻烦,所以在hibernate中,如果表中有外键,那么一般会将这个外键设置成那个表的实体类,这样一来,我们就不需要多那一步了。
至于你说为什么将属性设置到班级的对象,然后保存学生的信息,学生表中就有班级id这个字段的值了,这个问题,很简单,因为你不仅把属性保存到班级对象中了,你肯定还把这个班级对象作为属性设置给学生了,所以就有了。
换句话说,你等于还是间接的设置了班级id,这个字段,具体他们的对应关系,自然是在配置文件中显示的。
不知道说了这么多,你能理解不。
手酸了,,,,希望对你有帮助。。。
外键是什么意思?举个例子说,数据库中,你有个表是学生表,
我们简单点说有三列,一个是学生的id,一个是姓名,一个是班级的id
而在数据库中,你会建一个班级表,
其中有id和班级的名称,比如计算机三班,二班等等。
班级和学生,班级是一,学生是多。
而在hibernate中,为了简单起见,一般会在学生类中将班级属性设置成一个班级类,而在班级类中额外添加一个list或者set。这么做的好处简单来说,是为了方便。
怎么方便呢?
这么说吧,比如我们没这么设置,而是在学生类中只有一个班级的id,那么你查到一个学生,想看他班级的名称,是不是还要根据班级的id,去班级表查找对应的名字,这么一来,就会十分麻烦,所以在hibernate中,如果表中有外键,那么一般会将这个外键设置成那个表的实体类,这样一来,我们就不需要多那一步了。
至于你说为什么将属性设置到班级的对象,然后保存学生的信息,学生表中就有班级id这个字段的值了,这个问题,很简单,因为你不仅把属性保存到班级对象中了,你肯定还把这个班级对象作为属性设置给学生了,所以就有了。
换句话说,你等于还是间接的设置了班级id,这个字段,具体他们的对应关系,自然是在配置文件中显示的。
不知道说了这么多,你能理解不。
手酸了,,,,希望对你有帮助。。。
追问
恩。。。这个能理解...我也想通了...会用hibernate就可以了...至于配置文件...不管他了..反正可以自动生成..呵呵
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询