单向的多对一关联在类中如何配置

Python014

单向的多对一关联在类中如何配置,第1张

在开始编码之前先分析一下hibernate中的单向多对一是种怎样的关联关系。

如图,一个团队里面会有多个成员,这里多方就是成员,一方就是这些成员所在的团队。如果配置了hibernate中的单向多对一关联,则意味着可以通过成员找到团队,但无法通过团队找到属于团队的成员。从数据库的角度看,假设有team表和member表,member表会有一个外键,参照的是team表的主键。

2

/12

接下来开始编码。

打开eclipse,创建一个java工程文件。

要想使用hibernate,如果不使用注解和其他框架的话,正常会先做三件事,

导入hibernate所需的jar包,编写hibernate.cfg.xml(配置文件),还有一个就是编写一个Hibernate的工具类。

做完之后,工程目录、配置文件和工具类如图

具体操作过程可参考:Hibernate5入门教程。

3

/12

接下来就是编写数据库表的实体类和对应的映射文件。

根据一开始说的例子,简单创建了类Team和类Member以及它们对应的映射文件,而且还创建了类Test用于测试。创建完后,完整的工程目录如图。

4

/12

类Team和类Member以及它们对应的映射文件如图。映射文件中配置多对一关联关系的代码为:<many-to-one name="team" class="hibernate.many2one.Team" column="teamid"></many-to-one>

5

/12

在配置文件中配置映射文件。注意要修改配置文件中的数据库名,用户名和密码。

6

/12

配置完后,在Test类中加入如图代码,测试是否配置正确。

7

/12

运行Test.java后,结果如图。Hibernate向数据库发送了三条sql语句,具体内容看图。

8

/12

进入mysql,查看配置的数据库(我的是bd_show),查看bd_show中存在的表,如图可以看到刚刚hibernate生成的两个表。

9

/12

两个表的结构如图。

10

/12

向两个表中插入如图数据,用于等会的测试。

如果配置是正确的话,等会用hibernate去取成员的数据时,是能通过取出的成员数据得到他们所在的团队的数据。

11

/12

将Test类中main函数改为如图内容。

12

/12

修改后再次运行Test.java,控制台输出结果如图。可以看到,通过团队成员找到了成员所在的团队的名称。

首先我要告诉你,数据库描述表之间的关系是通过外键描述的,hibernate中是通过属性描述的。

外键是什么意思?举个例子说,数据库中,你有个表是学生表,

我们简单点说有三列,一个是学生的id,一个是姓名,一个是班级的id

而在数据库中,你会建一个班级表,

其中有id和班级的名称,比如计算机三班,二班等等。

班级和学生,班级是一,学生是多。

而在hibernate中,为了简单起见,一般会在学生类中将班级属性设置成一个班级类,而在班级类中额外添加一个list或者set。这么做的好处简单来说,是为了方便。

怎么方便呢?

这么说吧,比如我们没这么设置,而是在学生类中只有一个班级的id,那么你查到一个学生,想看他班级的名称,是不是还要根据班级的id,去班级表查找对应的名字,这么一来,就会十分麻烦,所以在hibernate中,如果表中有外键,那么一般会将这个外键设置成那个表的实体类,这样一来,我们就不需要多那一步了。

至于你说为什么将属性设置到班级的对象,然后保存学生的信息,学生表中就有班级id这个字段的值了,这个问题,很简单,因为你不仅把属性保存到班级对象中了,你肯定还把这个班级对象作为属性设置给学生了,所以就有了。

换句话说,你等于还是间接的设置了班级id,这个字段,具体他们的对应关系,自然是在配置文件中显示的。

不知道说了这么多,你能理解不。

手酸了,,,,希望对你有帮助。。。