• 在实施@OneToMany双向关系时,有很多方法会搞砸。这里说明一下最佳实践方式:关键点: 始终从父级到子级实现级联 在父类上使用mappedBy 在父类上使用orphanRemoval以删除父类不再引用的子类 在父类上使用helper方法可以
  • 双向@OneToOne的效率低于与父表共享主键的单向@OneToOne。因此,不要使用双向@OneToOne,最好是依靠单向@OneToOne和@MapsId。 第一步:在子实体这边使用@MapsId <
  • 在PostgreSQL中使用GenerationType.IDENTITY会失效批处理能力。因此使用其(BIG)SERIAL,它的作用类似MySQL的 AUTO_INCREMENT。 这里使用GenerationType.SEQUENCE激活批插入 icon
  • 对于托管实体调用save是一个坏主意,因为Hibernate使用脏检查机制来帮助我们避免这种冗余调用。 关键点: Hibernate对于托管实体会触发UPDATE语句,无需显式调用save()方法 在幕后,进行冗余save( icon
  • 获取比你实际所需要的更多数据并不好,此外,当您不打算修改实体时,获取实体(通过在持久化上下文中加入的方式获取实体)是最常见的错误之一,它隐含性能损失。因此,使用DTO可允许我们仅提取所需的数据。在这个应用程序中,我们依赖  @SqlResultSetMapping和EntityMan icon
  • 在MySQL中,TABLE生成器是您总是希望避免的。 icon
  • 执行更多的SQL总是性能损失。重要的是努力尽可能地减少它们的数量,并且依赖于指向引用是一种易于使用的优化方式。当一个带有指向其父实体的子实体持久化并时,Proxy可能很有用。在这种情况下,从数据库中获取父实体(执行SELECT语句)是一种性能损失和无意义的操作。Hibernate可以 icon
  • 第一步,在实体中标记你的业务字段为@NaturalId: icon
  • 默认情况下,如果使用@ElementCollection标注一个实体中的子集合,这个集合是懒加载的,不会随着这个实体加载而立即加载: icon
  • 当不能直接提取时,我们可以考虑JPQL / HQL查询提取。本文的应用程序展示如何通过JpaRepository,EntityManager和Session实现查询概念的证明。关键点: 对于JpaRepository, 使用@Query或Spring Data icon
  • 从实体中获取DTO数据,也就是从DDD聚合中获取DDD值对象有多种方式,如果我们不使用DTO方式,直接返回完整实体聚合,容易导致性能损失,使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们展示如何依赖于javax.persistence.Tuple和JPQL生成DTO。点击#DTO icon
  • 将Java 8 Optional视为处理所有的空值的“银弹”可能会带来更多弊大于利。合适它们是最好的方法。本文的应用程序是在实体和查询中如何正确使用Java 8 Optional的概念证明。 关键点: 使用Spring Da icon
  • 从实体中获取DTO数据,也就是从DDD聚合中获取DDD值对象有多种方式,如果我们不使用DTO方式,直接返回完整实体聚合,容易导致性能损失,使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们展示如何依赖于javax.persistence.Tuple原生SQL生成DTO。点击#DTO icon
  • 获取超出你实际需要的数据容易导致性能损失。使用DTO可以让我们只提取所需的数据。在这里我们展示依赖SqlResultSetMapping,NamedNativeQuery和EntityManager实现DTO。 假设需要从实体Car中获取name和 icon
  • 对SQL语句如果没有计数和断言的情况下,很容易失去对当前场景背后执行的SQL的控制,从而导致性能损失。本应用是计数和断言“幕后”触发的SQL语句的示例。计数SQL语句非常有用,以确保您的代码不会生成比你预计的更多的SQL(例如,通过声明预期语句的数量可以轻松检测到N + 1)。 icon
  • 当您需要将自己的操作方法绑定到某个实体生命周期事件时,请不要重新发明轮子。只需依靠内置的JPA回调。本应用是启用JPA回调(Pre/ PostPersist,Pre/ PostUpdate,Pre/ PostRemove,和PostLoad)的示例。第一步:在实体中,编写回调 icon
  • N + 1是一个可能导致严重性能损失的问题,为了消除它,你必须找到/识别它,但这并不总很容易,但这里列举导致N + 1的最常见场景之一。描述: N + 1是一个延迟抓取的问题(但是,急切加载也不能免除)。如果您没有机会看到它的运行情况,这个应用程序将再现N + 1行为。为了避免N + icon
  • 在Hibernate版本5之前,脏数据检查机制依赖于Java Reflection API,Java Reflection一直很慢,会降低性能;从Hibernate版本5开始,脏检查机制依赖于字节码增强。这种方法可以保持更好的性能,尤其是当您拥有相对大量的实体时。关键点: < icon