Dojo
话题
新佳
订阅
极道
元认知
元逻辑
元设计
元编程
元语言
jpa教程
Hibernate/JPA中@OneToOne和@MapsId的使用
双向@OneToOne的效率低于与父表共享主键的单向@OneToOne。因此,不要使用双向@OneToOne,最好是依靠单向@OneToOne和@MapsId。 第一步:在子实体这边使用@MapsId <
Hibernate/JPA中@ElementCollection如果没有@OrderColumn性能会降低
@ElementCollection是Hibernate/JPA中代表父子关系的多方注释,但是没有@OrderColumn的@ElementCollection插入和删除容易出现性能损失,而使用@OrderColumn性能变得更好。本应用程序展示了没有@OrderColumn使用@E
如何使用Spring Projections和Join实现DTO?
SQL JOINS和DTO是我们打击N + 1问题的好办法,可参考#DTO标签看看其他方式,这里,我们通过使用Spring Projections(DTO)和通过JPQL和本机SQL(用于MySQL)编写各种Join联接的概念证明。 1. 定义多个
Hibernate/JPA批插入中使用PostgreSQL的(BIG)SERIAL自增主键
在PostgreSQL中使用GenerationType.IDENTITY会失效批处理能力。因此使用其(BIG)SERIAL,它的作用类似MySQL的 AUTO_INCREMENT。 这里使用GenerationType.SEQUENCE激活批插入
Hibernate/JPA中避免save()冗余调用
对于托管实体调用save是一个坏主意,因为Hibernate使用脏检查机制来帮助我们避免这种冗余调用。 关键点: Hibernate对于托管实体会触发UPDATE语句,无需显式调用save()方法 在幕后,进行冗余save(
如何通过Hibernate/JPA的SqlResultSetMapping生成需要数据的DTO?
获取比你实际所需要的更多数据并不好,此外,当您不打算修改实体时,获取实体(通过在持久化上下文中加入的方式获取实体)是最常见的错误之一,它隐含性能损失。因此,使用DTO可允许我们仅提取所需的数据。在这个应用程序中,我们依赖 @SqlResultSetMapping和EntityMan
为什么在Hibernate/JPA实体中避免使用Lombok @EqualsAndHashCode?
Lombok 是一个非常受欢迎和有用的图书馆。尽管如此,请注意Lombok @EqualsAndHashCode对实体的影响可能会带来严重问题。实体应实施equals()和hashCode()。主要问题是Hibernate要求实体在其所有状态转换(瞬态,附加,分离 和删除)中等于自身
如何在SpringBoot中使用Hibernate/JPA的@NaturalId?
第一步,在实体中标记你的业务字段为@NaturalId:
Hibernate/JPA中如何使用JOIN FETCH获取一个懒加载集合?
默认情况下,如果使用@ElementCollection标注一个实体中的子集合,这个集合是懒加载的,不会随着这个实体加载而立即加载:
如何通过javax.persistence.Tuple和JPQL提取DTO?
从实体中获取DTO数据,也就是从DDD聚合中获取DDD值对象有多种方式,如果我们不使用DTO方式,直接返回完整实体聚合,容易导致性能损失,使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们展示如何依赖于javax.persistence.Tuple和JPQL生成DTO。点击#DTO
如何通过ResultTransformer和原生SQL或JPQL生成DTO?
获取超出需要的数据更容易导致性能损失。使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们依赖于Hibernate ResultTransformer和原生SQL生成DTO? 对于不可变的DTO值对象和可变的DTO对象使用不同的方式,不可变
如何在使用Open-Session in View时避免性能损失?
Open-Session In View会在你即使没有使用惰性实体情况下加载且初始化并获取它们,这会导致严重的性能损失。Open-Session in View 反模式在Spring Boot中默认是激活的。如果您更喜欢使用它,那么需要尝试尽可能减轻性能损失:一种优化是将标记Conn
如何通过javax.persistence.Tuple和原生SQL生成DTO?
从实体中获取DTO数据,也就是从DDD聚合中获取DDD值对象有多种方式,如果我们不使用DTO方式,直接返回完整实体聚合,容易导致性能损失,使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们展示如何依赖于javax.persistence.Tuple原生SQL生成DTO。点击#DTO
如何通过SqlResultSetMapping和NamedNativeQuery生成DTO?
获取超出你实际需要的数据容易导致性能损失。使用DTO可以让我们只提取所需的数据。在这里我们展示依赖SqlResultSetMapping,NamedNativeQuery和EntityManager实现DTO。 假设需要从实体Car中获取name和
Hibernate/JPA如何保证不生成多余的SQL语句?
对SQL语句如果没有计数和断言的情况下,很容易失去对当前场景背后执行的SQL的控制,从而导致性能损失。本应用是计数和断言“幕后”触发的SQL语句的示例。计数SQL语句非常有用,以确保您的代码不会生成比你预计的更多的SQL(例如,通过声明预期语句的数量可以轻松检测到N + 1)。
如何使用JPA回调?
当您需要将自己的操作方法绑定到某个实体生命周期事件时,请不要重新发明轮子。只需依靠内置的JPA回调。本应用是启用JPA回调(Pre/ PostPersist,Pre/ PostUpdate,Pre/ PostRemove,和PostLoad)的示例。第一步:在实体中,编写回调
如何通过构造函数和JPQL生成DTO?
获取超出需要的数据更容易导致性能损失。使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们依赖于Constructor Expression和JPQLL生成DTO。点击#DTO标签可获得更多生成DTO的方式。同样,在DDD编程中,从DDD聚合中获取DDD值对象有多种方式,如果
使用Spring post commit注意点
Spring post-commit钩子会一直保持数据库连接打开直到完成,因此使用afterCommit方法实现提交后的钩子时,其中任务不能耗时过长,因为这是数据库连接一直打开,没有关闭归还到连接池,在负载很重的情况下,会导致连接池资源耗尽。因此,避免在提交后执行耗时的任务,如下:@
上页
下页
关闭