hibernate中的对应关系其实就是数据库中表的对应关系,

就跟某些电影中的某些场景是一样一样滴。

比如可以是一男一女,还可以是一男多女,

更可以是多男一女,最后最后最后还可以是多男多女!!!

有些不纯洁的看官肯定已经开始想歪了吧···,我还是上图吧!请看下图

我说滴是这样滴一群人打群架滴场景,嘿嘿嘿···

好吧,进入正题!!!

数据库中表与表之间的数据映射关系有一对一,一对多,多对一,多对多。例如:

一个身份证只能对应一个护照,一个护照也只能对应一个身份证,这就是一对一的关系

一个男人可以有多个孩子,这多个孩子只能对应一个爹,从男人的角度这就是一对多的关系,而从孩子的角度,那就是多对一的关系

一个用户可以买多件不同的商品,而某个商品也可以被多个用户购买,这就是多对多的关系,一般多对多的关系,我们会再创建一个关系表来保存这种关联,所以最后这三张表的关系就会变成两个一对多的关系。

如果有不清楚的小伙伴,建议先学习一下数据库再来继续。

在实际开发中,用得最多的就是一对多和多对一,今天我们就来说说在hibernate中如何还配置这两种关系。

一、一对多映射关系

我这儿举的例子是个简化版的博客数据库,里面有三张表,分别是:作者表、博客表、评论表。

因为是入门篇哈,所以表的结构进行了简化,对应关系就是:一个作者可以有多个博客,一个博客可以有多个评论。

现在我们要实现这个一个需求:查询作者,并且同时查询出他的所有博客。

1.1) 首先,使用DBBrowser来生成作者表和博客表对应的实体类和映射文件。

注意勾选下面的a<-b,因为我是在author表上点的右键来生成,勾上这个选项就表示所有引用了author表的外键表都会关联生成。

生成的author实体类就会多出一个SET集合。

我们手工把它改成泛型集合。

author的映射文件中也会多出一个SET标签。

1.2)这儿我们先不做修改,然后在Test类中编写测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Test {
    public static void main(String[] args) {
 
        Session session = HibernateSessionFactory.getSession();
 
        Author author = (Author)session.get(Author.class1);
        System.out.println("看SQL语句是在我之前还是之后!");
        System.out.println("作者:"+author.getUsername());
        //遍历该作者的所有博客
        for (Blog blog : author.getBlogs()) {
            System.out.println("博客:"+blog.getTitle());
        }
         
        HibernateSessionFactory.closeSession();
    }
}

可以看到运行后的结果如下所示:

从上面可以看到,虽然我们只是get了一个author对象,但在使用它内部的blog对象时,hibernate会自动去查询该作者的所有博客,是不是非常方便,比我们自己写JDBC的代码要简单很多了吧!!!

马上要回家了,今天先讲到这儿吧·,看官们自己还有时间的话,可以再试试多对一的映射,如果都没问题的话,后面还有几个属性要简单介绍一下的:lazy、cascade、not-null、inverse。

好了,今天就到这儿吧!

《Java从入门到放弃》入门篇:hibernate中的多表对应关系的更多相关文章

  1. Java性能测试从入门到放弃-概述篇

    Java性能测试从入门到放弃-概念篇 辅助工具 Jmeter: Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试.JMeter 可以用于对服务器.网络 ...

  2. Hibernate中的多表查询及抓取策略

    1.Hibernate中的多表查询 1.1SQL中的多表查询 [交叉连接] select * from A,B; [内连接] 显示内连接:inner join(inner 可以省略) Select * ...

  3. (转)Hibernate中的多表操作

    http://blog.csdn.net/yerenyuan_pku/article/details/70556208 Hibernate中的多表操作 在实际开发中,我们不可能只是简简单单地去操作单表 ...

  4. Flink从入门到放弃(入门篇3)-DataSetAPI

    戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...

  5. Python爬虫从入门到放弃 之 Scrapy框架中Download Middleware用法

    这篇文章中写了常用的下载中间件的用法和例子.Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所以 ...

  6. (十五)Hibernate中的多表操作(5):双向多对多

    Hibernate的双向关联. 对象之间可以相互读取.        双向只针对读取的操作.对于增.删除.改的操作没有任何影响. 案例 : 实现双向多对多 MenuBean.java package ...

  7. Flink从入门到放弃(入门篇1)-Flink是什么

    戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...

  8. Flink从入门到放弃(入门篇2)-本地环境搭建&构建第一个Flink应用

    戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...

  9. Flink从入门到放弃(入门篇4) DataStreamAPI

    戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...

随机推荐

  1. python yield from 语法

    python yield from 语法 yield语法比较简单, 教程也很多 , yield from的中文讲解很少 , python官网是这样解释的 PEP 380 adds the yield ...

  2. jQuery从入门到忘记

    jQuery 是一套Javascript脚本库,注意 jQuery 是脚本库,而不是脚本框架."库"不等于"框架".jQuery 并不能帮助我们解决脚本的引用管 ...

  3. h1b期间回国须知

    今天才搞明白几点 1. visa 和 status 是两个不同的东西,status能保证合法在美国.visa能保证合法进入美国 所以,h1b十月份的身份转换时status的转换,如果回国还需要重新办h ...

  4. H3CNE实验:Comware基本命令操作

    第1步:Comware命令视图及切换操作 <H3C>system-view System View: return to User View with Ctrl+Z. [H3C]quit ...

  5. JQuery中常用的选择器

    属性选择器 1>  [attribute] 概述:匹配包含给定属性的元素. 示例 jQuery 代码:$("div[id]") 描述:查找所有含有 id 属性的 div 元素 ...

  6. Java自学手记——多态

    对象转型 学习多态前先明白一个叫对象转型的概念,如: class Animal{ void sleep(){ System.out.println("睡觉"); } } class ...

  7. 孤儿文档是怎样产生的(MongoDB orphaned document)

    使用MongoDB的开发人员应该都听说过孤儿文档(orphaned document)这回事儿,可谓闻着沉默,遇者流泪.本文基于MongoDB3.0来看看怎么产生一个orphaned document ...

  8. Android--Intent组件带参传递与返回

    Android 是 单例模式: 表示 application 唯一的.每个应用被启动的时候,其实是 application 被创建. Context 上下文: context 是 Applicatio ...

  9. 使用Spring boot + jQuery上传文件(kotlin)

    文件上传也是常见的功能,趁着周末,用Spring boot来实现一遍. 前端部分 前端使用jQuery,这部分并不复杂,jQuery可以读取表单内的文件,这里可以通过formdata对象来组装键值对, ...

  10. (转)ZXing解析二维码

    1 ZXing解析二维码 上一篇文件已经说过如何用ZXing进行生成二维码和带图片的二维码,下面说下如何解析二维码 二维码的解析和生成类似,也可以参考google的一个操作类 BufferedImag ...