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. ES6的十大特性和认知

    ---恢复内容开始--- ES6(ECMAScript2015)的出现,无疑给前端开发人员带来了新的惊喜,它包含了一些很棒的新特性,可以更加方便的实现很多复杂的操作,提高开发人员的效率.本文主要针对E ...

  2. javascript闭包的妙用——实现函数的重载

    最近在看John Resig 与 Bear Bibeault的<JavaScript 忍者秘籍>.这本书处处提现了js的魔法(从我这个写强类型语言的人看来).js能够点石成金,处处体现着它 ...

  3. Python实现浏览器自动化操作

    Python实现浏览器自动化操作 (2012-08-02 17:35:43) 转载▼     最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是 ...

  4. 关于JAVA正则匹配空白字符的问题

    今天遇到一个字符串,怎么匹配空格都不成功!!! 我把空格复制到test.properties文件 显示“\u3000” ,这是什么? 这是全角空格!!! 查了一下    \s    不支持全角 1.& ...

  5. java 邮件发送工具类

    首先需要下载mail.jar文件,我个人通常是使用maven中心库的那个: <dependency> <groupId>javax.mail</groupId> & ...

  6. python+selenium自动化测试环境安装

    因为自己安装自动化测试环境时,遇到过许多问题,自己整理了一下安装的步骤,感谢那些帮助过我的人. 1.安装python,我装的是3.5版本,网络上也有许多安装步骤,照着就可以了(其实一直下一步也行) 不 ...

  7. RxSwift 系列(六) -- Mathematical and Aggregate Operators

    前言 本篇文章将要学习RxSwift中数学和集合操作符,在RxSwift中包括了: toArray reduce concat toArray 将一个Observable序列转化为一个数组,并转换为一 ...

  8. 文本三剑客---sed 基础

    sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反.在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式的插入.删除或者替换数据中的文本.流编辑器则会自 ...

  9. 自然饱和度(Vibrance)算法的模拟实现及其SSE优化(附源码,可作为SSE图像入门,Vibrance算法也可用于简单的肤色调整)。

    Vibrance这个单词搜索翻译一般振动,抖动或者是响亮.活力,但是官方的词汇里还从来未出现过自然饱和度这个词,也不知道当时的Adobe中文翻译人员怎么会这样处理.但是我们看看PS对这个功能的解释: ...

  10. (转)xml

    1  XML理论回顾 1.1 XML概述 1.XML是可扩展标记语言.是由W3C指定并维护的,目前最新的版本是1.0 2.XML作用: 2.1传输数据,它是一种通用的数据交换格式 2.2配置文件. 1 ...