Hibernate8-单项多对一映射

其实单向关联用的不是很多,用的最多的是双向关联。

什么是关联映射

在领域模型中,类与类之间的最普遍的关系就是关联关系。
以customer和order为例:一个用户可以有多个订单,而一个订单只能有一个用户,所以这是一对多的关联。

判断单项一对多或多对一

栗子1:还是以customer和order为例,


Hibernate8-单项多对一映射_第1张图片
Hibernate8-1.png

可以看出order对象中的c_id属性存放着customer表中的主键对象,而customer对象中没有一个属性是和order对象有关联的,所以是多对一单项关联(多个订单对应一个用户)。栗子2:


Hibernate8-单项多对一映射_第2张图片
Hibernate8-2.png

如果customer对象存在order对象对象的引用,那么就是一对多。到底是一对多还是多对一要看实际操作。

配置映射

    现在我们有两个映射文件customer和order。我们做的是多对一关联映射,而从我们的业务中可以看出,是多个订单对应一个用户,那么我们就要在order映射文件中写配置。
     配置多对一关联关系需要用到标签,很好记多到一。我们详细介绍一下这个标签的使用。


    看到上面的一些属性可能觉得很奇怪,我们仔细讲解一下;首先我们确定标签肯定是写在标签中的,而在标签下的所有标签的name属性值都是映射文件所对应类的属性名吧?例如User类的映射文件中的标签的name属性对应的就是User对象的userName属性。
    所以的name属性也一样对应的是Order对象中customer属性名。
    我们Order类对应的是orders表,在Orders表的customer_id字段是外键,记录着customer表中的主键,所以此字段的外键指向那个表的主键,这里的标签的class属性值就应该是对应表的实体类(包名+类名)。

注意:在orders表的外键,为什么要在orders表的实体类中要写一个类型为Customer的属性呢?
    这是因为Hibernate会根据我们表的外键自动查询出对应表的主键,而Hibernate查询出来的是一个对象,所以这里要写对象类型。
    上面两个属性的意思知道,那么column属性呢?column属性值为orders表中外键的字段名;与name属性意思差不多。

给大家一张图个能更好的理解


Hibernate8-单项多对一映射_第3张图片
Hibernate8-4.png
Hibernate8-单项多对一映射_第4张图片
配图

你可能感兴趣的:(Hibernate8-单项多对一映射)