首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hibernate学习笔记 多表映射

前面说了Hibernate的单表映射,由于是实体类和数据表之间一对一的映射,所以比较简单。现在就来说说多表映射,这需要涉及到多个实体类和数据表之间的关系。因此稍微复杂一点。...建立实体类 我建立了两个实体类,一个作者类,一个文章类,其他方法都忽略了,就留下了注解。...我这里是用来修改外键约束的名称。其他的使用方法需要查看官方文档。...这时候就需要一个头像表,这个表中每个头像和用户表中的每个用户就是一一对应的关系。 一对一关系也存在单向和双向的。首先我们看看单向映射。...另外需要注意的是,使用多对多映射时,不能把级联属性指定为CascadeType.DELETE或者CascadeType.ALL,我们应该不希望在删除一篇文章的标签时,同时将该标签下的所有文章都删除吧?

1.6K10

JPA实体类中的注解

@Entity   标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类 @Table   标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相对应...,例如我们用hibernate实现的就是有hibernate来控制   GenerationType总共有四个:   AUTO:   TABLE:由一个表来维护主键,这个表记录上一次生成的主键,然后+1...默认加载为立即加载 *ToMany 默认加载方式为懒加载 @Entity @Entity标记在类名上面,作为实体类的标识 @Table 当实体类与其映射的数据库表名不同名时需要使用 @Table...@OneToMany 描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段。 ...例如,实体Order有一个user属性来关联实体User,则Order的user属性为一个外键,  其默认的名称为实体User的名称+下划线+实体User的主键名称  @JoinTable(name =

3.9K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《Java从入门到放弃》框架入门篇:使用注解的方式配置hibernate映射关系

    之前我们都是使用配置文件的方式来生成的代码,虽然和JDBC比较简单了很多,但每次都在修改时需要既改实体类又改映射文件。还是有点麻烦。...所以,这一篇,我们来说说使用注解的方式来在接在实体类上配置映射关系。...第一步:新建一个项目,或者把之前项目中的实体类、映射文件,还有hibernate中的mapping标签都删除,然后在DBBrowser中再次生成实体类。如下图: ?...红框中的选项就表示直接在POJO上以注解的方式加上映射关系。注意括号内的hibernate版本,必须是3.2及以上的才行。 生成后的实体类(Author和Blog)代码我就不复制上来了,内容太多。...@Cascade(value = {CascadeType.SAVE_UPDATE}),注意这儿的CascadeType是org.hibernate.annotations.CascadeType。

    62520

    Spring Data开发手册|Java持久化API(JPA)需要了解到什么程度呢?

    以前的开发模式 JPA是什么 JPA解决了什么问题 JPA的第一个HelloWord程序 详解配置文件 常用的注解 一对一的问题 一对多的问题 多对多的问题 JPA中常见的方法 JPA中对象的状态 注意事项...还不进入正文,来了,安排上,一个一个来: 回顾以前的开发模式 以前开发的时候我们的DAO层,要么使用Hibernate、要么使用iBatis、dbutils、toplink ?...JPA解决了什么问题 JPA统一了ORM框架访问数据库的API JPA解决了ORM框架一家独大的问题 JPA的第一个HelloWorld程序 导包 ? 编写配置文件 的是当前的实体对应的数据库中的表名字 @Entity:表示的是当前的实体是一个持久化的实体 @Id:这个表示当前的属性是一个主键 @GeneratedValue:主键的生成策略 strategy=GenerationType.IDENTITY...@Lob:修饰String类型的时候 表示的大文本 修饰byte[]的时候表示存储的是二进制 一对一的问题 需求:一个人对应了一个身份证、一个身份证也唯一对应了一个人 身份证-----

    1.3K30

    Hibernate框架学习之四(JPA操作)

    给实体类添加适当的注释可以在程序运行时告诉Hibernate如何将一个实体类保存到数据库中以及如何将数据以对象的形式从数据库中读取出来。   ...二、JPA的环境搭建 2.1 主要配置文件   使用JPA可以省去配置每个实体类的.xml 文件,只需直接在实体类中用注解的方式直接说明即可。...例如 , 实体 Order 有一个 user 属性来关联实体 User, 则 Order 的 user 属性为一个外键 , 其默认的名称为实体 User 的名称 + 下划线 + 实体 User 的主键名称...2.3.3 @OneToMany @OneToMany(fetch=FetchType,cascade=CascadeType)    @OneToMany 描述一个一对多的关联 , 该属性应该为集体类型...CascadeType)   @OneToOne 描述一个一对一的关联 。

    6.8K70

    Hibernate 注解配置

    "); SessionFactory sessionFactory = configuration.buildSessionFactory(); 1.1 映射实体 1.1.1 声明实体 @Entity用于将一个类声明为一个实体类...如果此分配大小与应用程序要求或数据库性能参数不匹配,请将 allocationSize 设置为所需的 int 值。...如果这与现有数据模型不匹配,请将 initialValue 设置为所需的 int 值。...莲蓬鬼话 奇幻文学 示例3.11 在配置一对多关系时并没有使用targetEntity属性来指定关联实体的类型,那么Hibernate怎么知道关联关系实体类型是Board呢?...在实体类中配置多对多关联关系需要使用@ManyToMany注解,该注解的配置选项和 @OneToMany一模一样。同时通过 @JoinTable 注解描述中间关联表和通过中间表关联到两方的外键。

    8410

    JPA的多表复杂查询:详细篇

    我将举几个栗子,来详细的说一下我自己在使用jpa多表复杂查询的场景和想法。 栗子1: 以一个实体类User中的几个属性进行筛选。...由于这个是user表 所以userRepository 继承JpaSpecificationExecutor接口,随后我创建了一个封装条件的类 public class PageParam {..., CascadeType.MERGE, CascadeType.REFRESH }, fetch = FetchType.LAZY) @org.hibernate.annotations.ForeignKey...,但是这里的泛型 我是直接给到了想要的查询结果的泛型,接下来 因为这里涉及到了一个 多表的查询 所以上面的单表查询的例子 已经不适合这个查询了,但是Criteria 的join方法 给我们提供了一个模式...hibernate的复杂查询 不逊于mybatis ,尤其是对sql 语句不是很精通的码农,虽然hibernate的门槛较高可jpa 恰恰降低了hibernate 所需要的门槛,希望大家可以通过我的经验

    4.4K101

    《Java从入门到放弃》框架入门篇:使用注解的方式配置hibernate映射关系

    之前我们都是使用配置文件的方式来生成的代码,虽然和JDBC比较简单了很多,但每次都在修改时需要既改实体类又改映射文件。还是有点麻烦。...所以,这一篇,我们来说说使用注解的方式来在接在实体类上配置映射关系。...第一步:新建一个项目,或者把之前项目中的实体类、映射文件,还有hibernate中的mapping标签都删除,然后在DBBrowser中再次生成实体类。如下图: ?...红框中的选项就表示直接在POJO上以注解的方式加上映射关系。注意括号内的hibernate版本,必须是3.2及以上的才行。 生成后的实体类(Author和Blog)代码我就不复制上来了,内容太多。...主要说明一下映射关系的注解。 cascade属性的值对应有javax.persistence.CascadeType的几个选项。 PERSIST:添加时级联。 MERGE:更新时级联。

    74870

    如何在 Spring Boot 中 读写数据

    CascadeType.MERGE | 级联合并;修改了子实体,保存父实体时也会同时保存子实体(常用)。 CascadeType.REMOVE | 级联删除;删除父实体时,会级联删除关联的子实体。...CascadeType.REFRESH | 级联刷新;获取父实体的同时也会重新获取最新的子实体。...CascadeType.ALL | 以上四种策略 无 | 默认值 因为这四种注解只能表示实体之间几对几的关系,指定与所操作实体相关联的数据库表中的列字段,就需要用到 @JoinColumn 注解。...@OneToOne @JoinColumn(name = "pwd_id") private Password pwd; 也可以不使用 @JoinColumn,Hibernate 会自动在用户表生成关联字段...private List user; 如果不指定@JoinColumn 注解,Hibernate会自动生成一张中间表来对用户和部门进行绑定,这张中间表默认的命名规则为:实体类表名_实体类中指定的属性名

    15.9K10

    「拥抱开源」从表设计到 JPA 实现

    今天的我拿起键盘就是猛敲代码。 果然,十分钟后各种 JPA 报错开始了。跟新手党一样,看到一个错误就解决一个,没有好好思考为什么会出现这样的错误。...于是乎,遇到一个解决一个,解决一个又遇到一个,经过数十个报错的来回起伏。 敏锐的我发现苗头有些不对。全靠脑细胞的记忆,以及开始对第一个错误的解决过程开始模糊不清了。...B 的每个实体至多与 A 的一个实体有关系。 满足以上两点,即 A 与 B 的关系是一对一。 一对多 1:N A 的每个实体至少与 B 的 N(N>0)个实体有关系。...B 的每个实体至多与 A 的一个实体有关系。 满足以上两点,即 A 与 B 的关系是一对多,B 与 A 的关系是多对一。 多对多 M:N A 的每个实体至少与 B 的 M(M>0)个实体有关系。...(如上图所示) 导购员、商品数据是基础数据表,即不主动关联其他的实体集。 商品主数据,包含两种关联关系。 与导购员之间的关系是多对一。即 @ManyToOne,注意这里只需要级联刷新操作即可。

    1.7K20

    史上最简单的JPA关联教程

    我们这边接着上一节的课程继续介绍,这边我新建了Goods,GoodsDetail,Classify,Address四个实体映射类。分别进行一对一,一对多,多对多的关联介绍。....html 我这边介绍的方法是:在控制的一方添加:@JsonIgnore 注解,然后在实体类上面添加@JsonIgnoreProperties({"hibernateLazyInitializer",...2.接下来就是介绍双向一对多的关联查询了,这边我用用户实体类(user)和地址实体类(address)来做具体介绍,注解分别为@OneToMany和@ManyToOne(一对多和多对一) 用户实体类:...,我采用的方法也是通过JsonIgnore来解决的。...3.接下来最后的多对多查询,这边我用商品实体类(goods)和商品分类实体类(classify)给大家做细致的介绍。

    1.8K60

    Hibernate SoftDelete 注解: 实现软删除

    Hibernate SoftDelete 注解 1、简介 在本文中,我们将看到如何使用 Hibernate 的 @SoftDelete 注解来为 JPA 实体启用软删除功能。...WHERE t.name = 'Misc' AND t.deleted = false 4、测试 PostDetails 实体上的 Hibernate @SoftDelete 注解 考虑到我们有一个...,我们将无法使用 find 方法获取它: assertNull(entityManager.find(PostDetails.class, 1L)); 5、测试 PostComment 实体上的 Hibernate...Hibernate @SoftDelete 注解 如果我们创建一个包含所有关联的 Post 实体,如以下示例所示: entityManager.persist( new Post()...如果你喜欢这篇文章,我相信你也会喜欢我的书和视频课程。 7、结论 与我们之前必须实现的机制相比,Hibernate @SoftDelete 注解非常容易使用。

    7100

    hibernate的关联与级联

    大家好,又见面了,我是你们的朋友全栈君。 什么是关联(association) 1、关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。...2、关联的分类:关联可以分为一对一、一对多/多对一、多对多关联 关联是有方向的 关联的关键点都在外键上 如何建立一对多双向关联 以订单和订单项做案例 一个订单对多个订单项,多个订单项对一个订单 在订单实体类中需要添加两个属性...: Set orderItems initOrderItems = 0;//0代表懒加载 1代表立即加载 在订单项的实体类中需要添加一个属性:Order order 定义一对多的关系时需要采用接口方式...@Entity //该类被hibernate当做实体给管理 @Table(name="xx_plat_role") //对应数据库的表 public class Role { @Id...,中间表user_role(userId,roleId),user是主控方,role是从方, 在spring+hibernate的环境下,使用的是Annotation配置 User.java @ManyToMany

    1.3K10

    走进JavaWeb技术世界13:Hibernate入门经典与注解式开发

    为什么要使用Hibernate?既然Hibernate是关于Java对象和关系数据库之间的联系的话,也就是我们MVC中的数据持久层->在编写程序中的DAO层......我们来使用一下update()方法吧....既然是更新操作了,那么肯定需要设置主键的,不设置主键,数据库怎么知道你要更新什么。...Hibernate注解开发 在Hibernate中我们一般都会使用注解,这样可以帮助我们大大简化hbm映射文件的配置。下面我就来为大家详细介绍。...如何设定类的属性不在表中映射?这两个问题我们一起解决。废话不多说,直接上例子。在cn.itheima.domain包下再编写一个Person实体类,同样使用注解配置。...扩展 Hibernate注解@Cascade中的DELETE_ORPHAN已经过时了,如下: 可使用下面方案来替换过时方案: Hibernate关联映射——多对多 以学生与老师为例开始我的表演,我是使用注解完成这种多对多的配置

    1.8K10

    Spring Data JPA 就是这么简单

    create-drop :慎用,当项目关闭,数据库中的表会被删掉。 validate :验证数据库和实体类的属性是否匹配,不匹配将会报错。 综上:个人感觉还是使用 update 较为稳妥。...@Transient 是一个属性注解,该注解标注的字段不会被应射到数据库当中。...以上使用的注解是定义一个实体类的常用注解,通过上述的注解我们就可以通过实体类生成数据库中的表,实体类和表建立一个对应的关系,下面贴出一个实体类的定义 demo : package com.zempty.springbootjpa.entity...现在先给出结论:该注解的使用场景是几个实体类的属性大致相同,没有什么区别,唯一区别的可能也就是类名了,这样的话我们可以考虑使用该注解,使用该注解的话我们多个实体类公用一个table ,该表由父类生成,父类中默认会生成一个...(specification); } 这里我演示了一个很简单的查询demo,希望可以帮助你打开使用 Specification 的大门。

    7K50

    走进JavaWeb技术世界13:Hibernate入门经典与注解式开发

    -- more --> 前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate框架?...为什么要使用Hibernate? 既然Hibernate是关于Java对象和关系数据库之间的联系的话,也就是我们MVC中的数据持久层->在编写程序中的DAO层......我们来使用一下update()方法吧....既然是更新操作了,那么肯定需要设置主键的,不设置主键,数据库怎么知道你要更新什么。...Hibernate注解开发 在Hibernate中我们一般都会使用注解,这样可以帮助我们大大简化hbm映射文件的配置。下面我就来为大家详细介绍。...扩展 Hibernate注解@Cascade中的DELETE_ORPHAN已经过时了,如下: 可使用下面方案来替换过时方案: Hibernate关联映射——多对多 以学生与老师为例开始我的表演,我是使用注解完成这种多对多的配置

    1.8K00
    领券