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

使用 Hibernate 实现软删除的最佳方式

这个数据库表模型的有趣之处在于它涵盖了所有三种数据库关系类型: 一对一 一对多 多对多 因此,我们将讨论所有这些实体及其关系的映射,敬请期待!...@Where 子句用于实体查询,我们希望提供它,以便 Hibernate 可以附加 deleted 列过滤条件来隐藏已删除的行。...如果我们只提供 @Where 子句,就不会有重复的删除子句,但在直接获取时已删除的行会变得可见。...中,我们不需要这些集合级别的注解,因为 PostComment 已经相应地注解了,Hibernate 知道需要过滤任何已删除的 PostComment。...INNER JOIN tag t ON pt.tag_id = t.id WHERE ( t.deleted = 0 ) AND pt.post_id = 1 9、结论 当你的应用程序需要保留已删除的条目并仅在

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

    Spring Boot 嵌入式服务器、Hibernate 关系和 Spring Data 全解析

    关系 使用 Hibernate,如果我们想在两个实体之间建立关系,则表之间必须存在外键关系,我们称之为引用完整性。...一对一 多对一 多对多 一对多 实体生命周期 在 Hibernate 中,我们可以创建一个实体的新对象并将其存储到数据库中,也可以从数据库中获取实体的现有数据。...Hibernate 生命周期主要有四种状态: 瞬态状态 持久状态 分离状态 已移除状态 Spring Data Spring Data 是一个用于在 Spring 应用程序中访问数据的项目集合。...它是在 JPA 之上的一个抽象,允许您使用更简单和更方便的 API 执行对数据库的 CRUD(创建、读取、更新、删除)操作。Spring Data JPA 还提供了其他功能,如分页、动态查询生成等。...,同时保留库特定的功能和能力。

    29520

    hibernate延迟加载详解

    此时可以从 Eclipse 的 Variables 窗口看到图 3 所示的输出: 图 3. 已加载的集合属性值 ?...关联实体的延迟加载 默认情况下,Hibernate 也会采用延迟加载来加载关联实体,不管是一对多关联、还是一对一关联、多对多关联,Hibernate 默认都会采用延迟加载。...对于关联实体,可以将其分为两种情况: 关联实体是多个实体时(包括一对多、多对多):此时关联实体将以集合的形式存在,Hibernate 将使用 PersistentSet、PersistentList、PersistentMap...这就是前面所介绍的情形。 关联实体是单个实体时(包括一对一、多对一):当 Hibernate 加载某个实体时,延迟的关联实体将是一个动态生成代理对象。...在这种设计方式下,系统会为某个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个 Java 对象代表另一个 Java 对象来采取行动。

    1.4K30

    什么是JPA?Java Persistence API简介

    主键 在JPA中,主键是用于唯一标识数据库中每个对象的字段。主键可用于引用对象并将对象与其他实体相关联。每当您在表中存储对象时,您还将指定要用作其主键的字段。...调用session.save()将创建或更新指定的类,具体取决于主键字段是否为null或是否适用于现有实体。调用entityManager.remove()将删除指定的类。...在表和对象中都有四种实体关系: 一到多 许多到一 许多一对多 一比一 每种类型的关系描述了实体与其他实体的关系。...例如,Musician实体可以与由诸如List或Set的集合表示的实体具有一对多的关系。...如果Musician包含一个Band字段,这些实体之间的关系可以是多对一的,这意味着在单个Band类上有Musician集合 。(假设每个音乐家只在一个乐队中演奏。)

    10.3K30

    hibernate的关联与级联

    大家好,又见面了,我是你们的朋友全栈君。 什么是关联(association) 1、关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。...2、关联的分类:关联可以分为一对一、一对多/多对一、多对多关联 关联是有方向的 关联的关键点都在外键上 如何建立一对多双向关联 以订单和订单项做案例 一个订单对多个订单项,多个订单项对一个订单 在订单实体类中需要添加两个属性...: Set orderItems initOrderItems = 0;//0代表懒加载 1代表立即加载 在订单项的实体类中需要添加一个属性:Order order 定义一对多的关系时需要采用接口方式...: 级联保存的简单总结: 案例 一对多 首先我们先理解一对多的什么意思,在数据库A表上的一条数据,可以映射B表的多条数据库,也就是站在A表的角度,就被B表的都跳数据引用, hiberante就认为...需要手动开启 @ManyToOne(fetch=FetchType.LAZY) 多对多 hibernate多对多当中,我们常常希望只删除一方已及对应的关系,但不想删除另一方 表user和表role多对多

    1.3K10

    SpringBoot重点详解–使用JPA操作数据库

    create 每次加载hibernate时,先删除已存在的数据库表结构再重新生成; create-drop 每次加载hibernate时,先删除已存在的数据库表结构再重新生成,并且当 sessionFactory...关闭时自动删除生成的数据库表结构; update 只在第一次加载hibernate时自动生成数据库表结构,以后再次加载hibernate时根据model类自动更新表结构; validate 每次加载hibernate...(Iterable ids); // 根据ID集合查询实体 long count(); // 获取实体的数量 void delete(ID id); // 删除指定ID的实体 void...extends T> entities); // 删除实体集合 void deleteAll(); // 删除所有实体 } PagingAndSortingRepository PagingAndSortingRepository...saveAndFlush(S entity); // 保存实体并立即提交事务 void deleteInBatch(Iterable entities); // 批量删除实体集合 void

    2.9K20

    初识Hibernate之关联映射(一)

    然后我们删除表,重新看看这次Hibernate为我们生成的表结构: ? 显然结果是一样的,我们使用组件映射的一个好处就在于在这个实体类中,对于数据表结构显得非常清晰,代码的封装性更好,方便查错。...的表结构,为它添加外键的引用,而引用的表就是Grade。...显然,Hibernate是先单独创建两张表,然后发送alter语句添加外键引用。那究竟set有什么用呢?它里面装的又是什么呢? 假设两张表中有如下信息: ?...执行save的时候会将grade保存到数据表中,然后Hibernate会查看自己set集合中对应的多端的记录并根据这些记录去更新多端表中的外键值,当然如果没有保存到student表中,自然会报错。...,save-update 表示保存和修改操作进行级联,delete表示删除的时候级联删除。

    1.3K80

    Java中使用Hibernate系列之映射关联启动工作学习(第五节)

    ,Hibernate会自动检测到集合已经被修改并需要更新回数据库,这叫做自动脏检查(automatic dirty checking),你也可以尝试修改任何对象的name或者date属性,只要他们处于持久化状态...,也就是被绑定到某个Hibernate 的Session上,Hibernate监视任何改变并在后台隐式写的方式执行SQL。...的调用使一个脱管对象重新持久化,你可以说它被绑定到一个新的单元操作上,所以在脱管状态下对它所做的任何修改都会被保存到数据库里,这也包括你对这个实体对象的集合所作的任何改动(增加/删除)。...,这在概念上与引用其它实体的集合有很大的不同。...好了,这一节的学习先到这里,后面章节中会继续学习Hibernate。我们学习方式是每一节学习一个知识点(每天花10分钟学习)。

    46770

    hibernate官方新手教程 (转载)

    原因是hbm2ddl.auto 打开了一个Hibernate的配置选项:这使得Hibernate会在每次执行的时候又一次创建数据库。通过从配置里删除这个选项来禁止它。...这些类型的实例没有自己的身份(identity),也不能在实体间共享 (比方两个person不能引用同一个firstname对象,即使他们有同样的名字)。...你也能够设计一个值类型的集合(collection of value types),这个在概念上与实体的集合有非常大的不同,可是在Java里面看起来差点儿是一样的。 2.3.4....,区别主要在element部分这次并没有包含对其他实体类型的引用,而是使用一个元素类型是 String的集合(这里使用小写的名字是向你表明它是一个Hibernate的映射类型或者类型转换器)。...你应该尽可能的在集合所相应的另外一端也这样做。 inverse映射參数到底表示什么呢?对于你和对于Java来说,一个双向关联不过在两端简单的设置引用。

    1K20

    springboot实战之ORM整合(JPA篇)

    ,并将运行期的实体对象持久化到数据库中。...如果不是此方面的需求建议取值设为none 可选参数 create 启动时删数据库中的表,然后创建,退出时不删除数据表 create-drop 启动时删数据库中的表,然后创建,退出时删除数据表,如果表不存在报错...数据库有更新时,自动更新时间 本例只用一个entity来演示,因此没有涉及到表与表的关联,常用表与表之间的关联注解如下 @JoinColumn 指定一个实体组织或实体的集合。...这是用在多对一和一对多关联。 @ManyToMany 定义了连接表之间的多对多一对多的关系。 @ManyToOne 定义了连接表之间的多对一的关系。...@OneToMany 定义了连接表之间存在一个一对多的关系。 @OneToOne 定义了连接表之间有一个一对一的关系。

    6.1K20

    Hibernate框架学习之注解配置关系映射

    这种情况下,两张表的关系则由一的一方进行维护,所以在一的一端需要定义一个集合属性用于映射多的一端的记录集合,看代码: //定义一的一端的实体类 @Entity @Table(name = "userSex...,hibernate首先会为我们插入四条userinfo记录到userinfo表中(其中的外键字段为空),然后插入一条记录到usersex表中,在这之后,hibernate将根据set集合中的元素依次执行这么一条...当然,当我们想要取出一条usersex实例时候,hibernate也会拿该实例的主键值去搜索userinfo表,并将匹配的记录装载到set集合中。...其实和我们介绍的单向多对一基本一样,只是此处的一的一端增加了一个一对多的映射,增加了对userinfo表的一个引用而已。...综上,我们介绍了关系型数据库中常见的几种关联关系,并介绍了Hibernate是如何利用注解对实体类进行映射的。

    2.3K90

    你不一定会用的JPA(Hibernate)的fetch all properties

    emails集合属性,该集合属性默认会使用延迟加载(lazy init)——这是JPA(Hibernate)的默认设定。...基于字节码增强的延迟加载 大部分的JPA(hibernate)使用者对延迟加载并不陌生: 默认情况下,对于集合属性或关联实体是多个(1-N或N-N关联)时,JPA(hibernate)自动就会启用延迟加载...使用Hibernate提供的字节码工具对持久化类执行字节码增强——如果你还记得书中关于AspectJ的介绍,就知道所谓字节码增强,通俗点来说就是修改class文件。...int age; // 定义一个集合属性 // 集合属性,保留该对象关联的邮件地址 @ElementCollection(targetClass=String.class)...最后总结 正如前面提出场景:当实体的某个属性是一个大数据对象时(比如LONGTEXT或CLOB等),此时程序必须对该属性执行延迟加载,否则会导致严重的性能问题。

    1.8K20

    Hibernate之关联关系映射(一对多和多对一映射,多对多映射)

    ~~~ 1:Hibernate的关联映射,存在一对多和多对一映射,多对多映射:   1.1:一对多和多对一映射,举例说明:      学生和老师:        一个老师可以教多个学生 【一对多映射】...;下面是两个实体类的关键点;     Dept.java: 注意private Set emps;//部门对应多个员工,即一对多的关系     Employee.java: private...-- 如果hibernate-mapping的package属性直接初始化了,下面就可以直接引用了 --> 7 hibernate-mapping package="com.bie.po">...【推荐,在一对多和多对一的关联关系中,保存数据最好是通过多对一来维护关系,这样可以减少update语句的生成,从而提高hibernate的利用效率】                emp1.setDept...-- 17 多对多映射: 18 1:映射的集合属性:deve 19 2:集合属性,对应的中间表:relation

    4.7K90
    领券