hibernate 多对一,一对多,多对多, 在JAVA中怎么理解呢?
展开全部
首先我要告诉你,数据库描述表之间的关系是通过外键描述的,hibernate中是通过属性描述的。
外键是什么意思?举个例子说,数据库中,你有个表是学生表,
我们简单点说有三列,一个是学生的id,一个是姓名,一个是班级的id
而在数据库中,你会建一个班级表,
其中有id和班级的名称,比如计算机三班,二班等等。
班级和学生,班级是一,学生是多。
而在hibernate中,为了简单起见,一般会在学生类中将班级属性设置成一个班级类,而在班级类中额外添加一个list或者set。这么做的好处简单来说,是为了方便。
怎么方便呢?
这么说吧,比如我们没这么设置,而是在学生类中只有一个班级的id,那么你查到一个学生,想看他班级的名称,是不是还要根据班级的id,去班级表查找对应的名字,这么一来,就会十分麻烦,所以在hibernate中,如果表中有外键,那么一般会将这个外键设置成那个表的实体类,这样一来,我们就不需要多那一步了。
至于你说为什么将属性设置到班级的对象,然后保存学生的信息,学生表中就有班级id这个字段的值了,这个问题,很简单,因为你不仅把属性保存到班级对象中了,你肯定还把这个班级对象作为属性设置给学生了,所以就有了。
换句话说,你等于还是间接的设置了班级id,这个字段,具体他们的对应关系,自然是在配置文件中显示的。
不知道说了这么多,你能理解不。
手酸了,,,,希望对你有帮助。。。
外键是什么意思?举个例子说,数据库中,你有个表是学生表,
我们简单点说有三列,一个是学生的id,一个是姓名,一个是班级的id
而在数据库中,你会建一个班级表,
其中有id和班级的名称,比如计算机三班,二班等等。
班级和学生,班级是一,学生是多。
而在hibernate中,为了简单起见,一般会在学生类中将班级属性设置成一个班级类,而在班级类中额外添加一个list或者set。这么做的好处简单来说,是为了方便。
怎么方便呢?
这么说吧,比如我们没这么设置,而是在学生类中只有一个班级的id,那么你查到一个学生,想看他班级的名称,是不是还要根据班级的id,去班级表查找对应的名字,这么一来,就会十分麻烦,所以在hibernate中,如果表中有外键,那么一般会将这个外键设置成那个表的实体类,这样一来,我们就不需要多那一步了。
至于你说为什么将属性设置到班级的对象,然后保存学生的信息,学生表中就有班级id这个字段的值了,这个问题,很简单,因为你不仅把属性保存到班级对象中了,你肯定还把这个班级对象作为属性设置给学生了,所以就有了。
换句话说,你等于还是间接的设置了班级id,这个字段,具体他们的对应关系,自然是在配置文件中显示的。
不知道说了这么多,你能理解不。
手酸了,,,,希望对你有帮助。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询