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

Hibernate学习笔记 多表映射

我们文章实体类添加如下一段,对应的Getter省略了: @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) private...对于单向一对多映射,Hibernate会建立一个映射表,比如这里就会建立一个article_comment表,表的内容就是两张表的主键。orphanRemoval指定当出现孤立数据是否删除孤立数据。...单向的一对多映射并不高效,如果删除了某文章的某评论,Hibernate进行的操作是这样:首先删除关联表该文章关联的所有评论,然后再将其他评论添加回关联表,最后,根据orphanRemoval决定是否删除评论表孤立的评论...需要注意在双向注解OneToMany需要额外一个参数,mappedBy,指定ManyToOne注解那一边的属性名,这样Hibernate才会明白这是一个双向注解。...另外需要注意的是,使用多对多映射,不能把级联属性指定为CascadeType.DELETE或者CascadeType.ALL,我们应该不希望删除一篇文章的标签,同时将该标签下的所有文章都删除吧?

1.5K10

如何在 Spring Boot 读写数据

1.3 Hibernate Hibernate 框架可以将应用的数据模型对象映射到关系数据库表的技术。 JPA 是规范,而Hibernate是JPA的一种实现框架。...如何在 Spring Boot 读写数据 cascade 属性用于指定级联策略: 策略 | 说明 --- | --- CascadeType.PERSIST | 级联持久化;保存实体,也会同时保存子实体...CascadeType.MERGE | 级联合并;修改了子实体,保存实体也会同时保存子实体(常用)。 CascadeType.REMOVE | 级联删除删除实体,会级联删除关联的子实体。...(2)@OneToMany 分析用户与部门之间关系,会发现一个用户只能属于一个部门,而一个部门可以包含有多个用户。...所以,如果站在部门的角度来看 分析用户与部门之间的关系,一个员工只能属于一个部门,但是一个部门可以包含有多个员工,如果我们站在部门的角度来看,部门与员工之间就是一对多的关系,部门实体类 Department

15.8K10
您找到你想要的搜索结果了吗?
是的
没有找到

Spring Data JPA 就是这么简单

jpa 并不是一个框架,是一类框架的总称,持久层框架 Hibernate 是 jpa 的一个具体实现,本文要谈的 spring data jpa 又是 Hibernate 的基础之上的封装实现。...子类建表:把多个类之间公有的属性提取出来放在它们公有的,各个类之间可以定义自己特有的属性,仅仅子类和数据库的表建立关联关系,的属性延续到每一个子类,在数据库每一个子类对应的表都有定义的属性...现在先给出一个结论:的属性是共有属性,类不会生成 table ,子类定义自己特有的属性,子类生成的 table 会有定义的属性字段。...当删除数据的时候,如果该数据存在外键是无法直接删除的,这是日常使用当中很容易遇到的一个问题,现在就这个问题给出一些解决方案: ClassRoom 核心代码如下所示: @OneToMany(mappedBy...级联保存和级联更新的时候你需要知道保存和更新关联数据的时候是没有关联到外键的,你需要借助关联类去维护外键,下面看代码展示: 教室类级联保存学生,教室类关键代码如下: @OneToMany(mappedBy

6.8K50

quarkus数据库篇之四:本地缓存

:准备工作》已创建了工程,今天在此工程下新增名为basic-cache的子工程,其pom与前文的工程区别不大,新增MySQL库,所有依赖如下 <...=drop-and-create quarkus.hibernate-orm.sql-load-script=import.sql 应用启动加载数据的脚本import.sql INSERT INTO...void setName(String name) { this.name = name; } } country表的实体类是Country.java,这里有一处要注意的地方,就是我们的设计...,本篇研究缓存用不上就不写了 @ApplicationScoped public class CountyService { @Inject EntityManager entityManager...(因为没人告诉它),这样从basic-cache读取的数据因为是本地缓存,所以还是更新前的数据 至此,quarkus数据库本地缓存的现有方案,咱们已全部完成了,希望本文能给您一些参考,协助您提升应用性能

63220

JPA 注解学习

UniqueConstraint(columnNames={"month", "day"})} ) @UniqueConstraint 将对应的字段设置唯一性标识 (注:UniqueConstraint只hibernate.hbm2ddl.auto...@Temporal 核心的 Java API 并没有定义时间精度 ( temporal precision )。因此处理时间类型数据,你还需要定义将其存储在数据库中所预期的精度。...双向 规范多对一端几乎总是双向关联的主体(owner)端,而一对多的关联注解为 @OneToMany(mappedBy=) @Entity public class Troop { @OneToMany...CascadeType.REFRESH, mappedBy = "teachers",//通过维护端的属性关联 fetch = FetchType.LAZY) // 关系维护端删除...,如果中间表存在些纪录的关联信息,则会删除该关联信息; // 关系被维护端删除,如果中间表存在些纪录的关联信息,则会删除失败 .

2.9K10

JPA系列之对象持久化API JPA简介

、OpenJPA、TopLink ##JPA的优势:## 标准化: 提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就能够不同的 JPA 框架下运行。...的框架和接口也都非常简单, 可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL...(3)使用 JPA API 完成数据增加、删除、修改和查询操作 创建 EntityManagerFactory (对应 Hibernate 的 SessionFactory); 创建 EntityManager...(对应 Hibernate 的Session); 使用Eclipse创建一个jpa项目 加入需要的jar hibernate-release-4.3.6.Final\lib\required*....的 cascade 属性来修改默认的删除策略.

80830

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

所以,这一篇,我们来说说使用注解的方式来接在实体类上配置映射关系。...第一步:新建一个项目,或者把之前项目中的实体类、映射文件,还有hibernate的mapping标签都删除,然后DBBrowser再次生成实体类。如下图: ?...红框的选项就表示直接在POJO上以注解的方式加上映射关系。注意括号内的hibernate版本,必须是3.2及以上的才行。 生成后的实体类(Author和Blog)代码我就不复制上来了,内容太多。...PERSIST:添加级联。 MERGE:更新级联。 REMOVE:删除级联。 ALL:    所有操作都级联(默认)。 如果你设置为ALL以外的值,你会发现,完全没有级联!!! ?...所以,如果你只需要在添加或更新级联,一般这样设置。

60820

Spring Boot with Mysql

当spring bootclasspath下发现某个数据库依赖存在且代码中有关于Datasource Bean的定义,就会自动创建一个数据库连接。...最常用的开源数据库是Mysql,Spring Boot通过下列配置来配置mysql: spring.datasource.driver-class-name=com.mysql.jdbc.Driver...依靠Entity类自动创建数据库和数据表,则还需要加上配置——spring.jpa.hibernate.ddl-auto=create-drop。...PS:在生产环境不要使用create-drop,这样会在程序启动删除旧的,再自动创建新的,最好使用update;还可以通过设置spring.jpa.show-sql = true来显示自动创建表的...;并且Publisher通过@OneToMany(mapped = "publisher")定义一个反向关联(1——>n),表明book类的publisher属性与这里的books形成对应关系。

3.6K20

Spring 全家桶之 Spring Data JPA(四)

的时候就已经建立 查看数据库表,外键存在,关联关系建立成功 One2ManyTest增加testSave2(),linkManset customer,customerset linkman...,testSave2()通过customerset linkMan,同时linkManset customer也可以建立两者之间的关系,后台执行了4条SQL语句,因此可以看出在一对多关系中一的一边建立外键维护关系可以执行较少的...:删除一个客户的同时删除客户的联系人 级联操作测试 首先修改配置文件applicationContext.xml,将create修改为update,每次执行测试的时候不会再新建表,而是变为更新表操作 <...) private Set linkManSet = new HashSet(); cascade属性可以配置 CascadeType.All:所有操作更新保存删除都配置级联操作...CascadeType.MERGE:更新配置级联操作 CascadeType.PERSIST:保存配置级联操作 CascadeType.REMOVE:删除配置级联操作 One2ManyTest中新增级联添加的测试方法

1.6K20

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

所以,这一篇,我们来说说使用注解的方式来接在实体类上配置映射关系。...第一步:新建一个项目,或者把之前项目中的实体类、映射文件,还有hibernate的mapping标签都删除,然后DBBrowser再次生成实体类。如下图: ?...红框的选项就表示直接在POJO上以注解的方式加上映射关系。注意括号内的hibernate版本,必须是3.2及以上的才行。 生成后的实体类(Author和Blog)代码我就不复制上来了,内容太多。...author", catalog = "blogdb") @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) @OneToMany...PERSIST:添加级联。 MERGE:更新级联。 REMOVE:删除级联。 ALL:    所有操作都级联(默认)。 如果你设置为ALL以外的值,你会发现,完全没有级联!!!

72670

springboot实战之ORM整合(JPA篇)

jpa一些比较核心配置属性介绍 jpa.hibernate.ddl-auto参数的作用主要用于:自动创建|更新|验证数据库表结构。...如果不是此方面的需求建议取值设为none 可选参数 create 启动删数据库的表,然后创建,退出删除数据表 create-drop 启动删数据库的表,然后创建,退出删除数据表,如果表不存在报错...,springboot2版本,默认mysql数据库存储引擎的是MyISAM,通过把取值设置为org.hibernate.dialect.MySQL5InnoDBDialect,就可以把默认的存储引擎切换为...@GeneratedValue 指定如何标识属性可以被初始化,例如自动、手动、或从序列表获得的值 @Column 指定持久属性栏属性。...即如果要更新的bean的字段,存在null值,原生的SimpleJpaRepository进行更新操作,会把null值更新进数据库,而有时候业务上我们不需要这样,因此可以重写SimpleJpaRepository

5.7K20

使用Hibernate、JPA、Lombok遇到的有趣问题

对于School类来说,mappedBy就应该指向Student类的school属性。 为了让主表知道从表的那些字段关联自己,主表一方可以用mappedBy指向从表的一个关联到自己的对象。...我们往HashSet里面添加元素,其实会调用hashCode()和equals()确定元素HashMap存储的具体位置。...可以看到Student类和School类都有id、createdDt、updatedDt、isDel的属性,我们如果把这些相同属性都提到,让Student类和School类继承这个类,同时使用@...那么会出现一个问题,比较对象是否相等时会得出错误的结果。因为@EqualsAndHashCode生成的equals()和hashCode()没有使用类的属性。接下来,我们就测试一下吧。...43 : $sonName.hashCode()); return result; } 项目地址 会陆续更新使用Hibernate、Mybatis、JPA碰到的有趣问题,会打算从源码角度分析

2.9K40

Spring Boot第八章-Spring Data JPA

好了,言归正传,本章关于spring data jpa的介绍挺多的,但是还是不够详细,实际应用我们还要处理好表与表之间的关系,各种相关注解,比如一对多的关系@OneToMany,@ManyToOne...还有懒加载的问题,比如在一对多A表类写了个子表类B的列表,采用懒加载的方式,不让每次查A的时候也查出所有的B,只有需要B的时候才触发对B的查询。...介绍Spring Data JPA的时候,我们首先认识下Hibernate。...根据实体类维护数据表结构的功能 #create:启动删除上一次生成的表,并根据实体类生成表,表数据会被清空 #create-drop:启动根据实体类生成表,sessionFactory关闭表会被删除...#update:启动时会根据实体类生成表,当实体类属性改变的时候,表结构也会更新初期开发阶段使用此项 #validate:启动校验实体类和数据表是否一致,当我们数据结构稳定时采用此选项 #none

3.2K20

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

给实体类添加适当的注释可以程序运行时告诉Hibernate如何将一个实体类保存到数据库以及如何将数据以对象的形式从数据库读取出来。   ...updateable: 表示 ORM 框架执行更新操作 , 该字段是否应该出现在 UPDATE 语句中 , 默认为 true....cascade: 表示级联操作策略 , 对于 OneToMany 类型的关联非常重要 , 通常该实体更新删除 , 其关联的实体也应当被更新删除 例如 : 实体 User 和 Order 是 OneToMany...em.persist(r3); tx.commit(); em.close(); } 5.2.2 级联保存   级联操作是指当主控方执行保存、更新或者删除操作...(禁用级联删除) /** * 删除操作 * 双向级联删除:不管是JPA还是hibernate,多对多中都禁止使用 */ @Test

6.6K70

hibernate的关联与级联

2、关联的分类:关联可以分为一对一、一对多/多对一、多对多关联 关联是有方向的 关联的关键点都在外键上 如何建立一对多双向关联 以订单和订单项做案例 一个订单对多个订单项,多个订单项对一个订单 订单实体类需要添加两个属性...: Set orderItems initOrderItems = 0;//0代表懒加载 1代表立即加载 订单项的实体类需要添加一个属性:Order order 定义一对多的关系需要采用接口方式...1、Order.hbm.xml需要添加(建立订单对订单项的一对多的关系) <!...信息,所以关联数据hiberante默认使用懒加载机制,所谓的懒加载就是我们需要使用这个数据他 才去查询,你不使用,H就不查询,但是必须建立session不关闭的情况下, @OneToMany...,user会被删除,user_role的的关系也会被删除了,但对应的role不会被删除 @Test public void testDelete() { User user = userDao.findById

1.3K10

JPA实体类的注解

insertable:表示ORM框架执行插入操作,该字段是否应出现INSETRT语句中,默认为true。 ...updateable:表示ORM框架执行更新操作,该字段是否应该出现在UPDATE语句中,默认为true。对于一经创建就不可以更改的字段,该属性非常有用,如对于birthday字段。 ...@OneToMany 描述一个一对多的关联,该属性应该为集体类型,在数据库并没有实际字段。 ...fetch:表示抓取策略,默认为FetchType.LAZY,因为关联的多个对象通常不必从数据库预先读取到内存  可选  cascade:表示级联操作策略,对于OneToMany类型的关联非常重要,通常该实体更新删除...,其关联的实体也应当被更新删除  例如:实体User和Order是OneToMany的关系,则实体User被删除,其关联的实体Order也应该被全部删除 @ManyToMany 描述一个多对多的关联

3.8K70
领券