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

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

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

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

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

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

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

好吧,进入正题!!!

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

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

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

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

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

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

一、一对多映射关系

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

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

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

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

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

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

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

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

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

public class Test {
    public static void main(String[] args) {

        Session session = HibernateSessionFactory.getSession();

        Author author = (Author)session.get(Author.class, 1);
        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。

好了,今天就到这儿吧!

时间: 2024-12-17 15:14:14

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

Spring整合Hibernate中自动建表

Spring整合Hibernate中自动建表 博客分类: JavaEE Java代码   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> <

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

这篇文章中写了常用的下载中间件的用法和例子.Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所以从这里我们可以知道下载中间件是介于Scrapy的request/response处理的钩子,用于修改Scrapy request和response. 编写自己的下载器中间件 编写下载器中间件,需要定义以下一个或者多个方法的python类 为了演示这里的中间件的使用方法,这里创建一个项目作为学习,这里

Vue.js2.0从入门到放弃---入门实例

最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中,在网上也搜了很多教程,按着教程来做,也总会出现这样那样的问题(坑啊,由于网上那些教程都是Vue.js 1.x版本的,现在用Vue.js 的构建工具都已经升级到2.0版本了),经过了一段时间的摸索和看官方的教程和api,才了解到2.0版本在1.0版本的基础上做了好多调整,废弃了好多api...废话不多说了,把我踩过的坑,在这里跟大家说说,希望对初学者有所帮助.ps:高手请绕道. 既然是入门实例,那肯定从最基础的开始了,希

转-Vue.js2.0从入门到放弃---入门实例(一)

http://blog.csdn.net/u013182762/article/details/53021374 标签: Vue.jsVue.js 2.0Vue.js入门实例Vue.js 2.0教程 2016-11-03 14:40 21431人阅读 评论(9) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 最 近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中,在网上也搜了很多教程,按着教程来做,也总会出现这样那样的问题(坑啊, 由

vue.js 2.0 从入门到放弃 --- 入门案例(一)

最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中,在网上也搜了很多教程,按着教程来做,也总会出现这样那样的问题(坑啊,由于网上那些教程都是Vue.js 1.x版本的,现在用Vue.js 的构建工具都已经升级到2.0版本了),经过了一段时间的摸索和看官方的教程和api,才了解到2.0版本在1.0版本的基础上做了好多调整,废弃了好多api...废话不多说了,把我踩过的坑,在这里跟大家说说,希望对初学者有所帮助.ps:高手请绕道. 既然是入门实例,那肯定从最基础的开始了,希

mysql从入门到放弃-入门知识介绍

数据库在互联网网站的重要性 简单地说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构来组织和存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据.由于数据库不易扩展,所以,在一个互联网网站里,它的瓶颈必然是数据库. 数据库的种类 在当今的互联网中,最常用的数据库模型主要有两种:1)关系型数据库:2)非关系型数据库(NOSQL).

Spring Security 入门 (二) 我们在篇(一)中已经谈到了默认的登录页面以及默认的登录账号和密码。 在这一篇中我们将自己定义登录页面及账号密码。 我们先从简单的开始吧:设置自定义的账号和密码(并非从数据库读取),虽然意义不大。 上一篇中,我们仅仅重写了 configure(HttpSecurity http) 方法,该方法是用于完成用户授权的。 为了完成自定义的认证,我

原文地址:https://www.cnblogs.com/SWQ12/p/11723732.html

(十四)Hibernate中的多表操作(4):单向一对一

案例一: 注解方式实现一对一 UserBean.java package bean; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import java

(十三)Hibernate中的多表操作(3):单向多对多

多对多的处理方式是,有一张中间表,中间表保存两个多方之间的关系.首先来看实际应用场景:在之前开发的系统中,应用了基于角色的控制访问,也就是RBAC模型,一个用户可能存在多种角色,一种角色也可能有多个用户,所以用户和角色之间是一个多对多的关系. 案例一:  使用注解方式实现多对多关系 RoleBean.java package bean; import java.io.Serializable; import java.util.HashSet; import java.util.Set; imp