Spring Boot和Hibernate技巧
来源: www.jdon.com
内容简介:本教程不是关于Hibernate或Spring Boot如何入门,相反,我们将研究一起使用它们时可能遇到的一些常见错误以及如何解决它们。我们将使用:Spring Data Envers允许我们访问由Hibernate Envers管理的实体修订版。Jackson Annotations还将帮助我们避免由JPA关系引起的常见Stack Overflow错误。
本文转载自:https://www.jdon.com/51392,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。
本教程不是关于Hibernate或Spring Boot如何入门,相反,我们将研究一起使用它们时可能遇到的一些常见错误以及如何解决它们。
我们将使用:
- Spring Boot 2
- Spring Webflux
- Spring Data JPA
- Spring Data Envers
- Jackson Annotations
- Jackson DataType Hibernate
- H2 Database
- Lombok
Spring Data Envers允许我们访问由Hibernate Envers管理的实体修订版。Jackson Annotations还将帮助我们避免由JPA关系引起的常见Stack Overflow错误。
Jackson DataType Hibernate Module将有助于Hibernate类型和延迟加载方面。
我们将使用H2来运行我们的项目。
在这个例子中,我们将使用JPA来创建大学和学生。将通用逻辑和属性存储在超类中总是一个好主意。
我们将为实体创建一个超类,并在其中存储公共属性。我们来看看我们的 BaseEntity 班级
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE) @MappedSuperclass @EntityListeners({AuditingEntityListener.class}) @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") public abstract class BaseEntity { @Id @GeneratedValue Long id; @CreatedDate LocalDateTime createdAt; @LastModifiedDate LocalDateTime updatedAt; }
你可以注意到的一件事是我没有在这个类使用Lombok 的@Data。@Data注释会自动添加@ToString注释,这可能会导致Stack Overflow错误。因此,最好手动管理注释。
@MappedSuperclass注释允许实体从基类继承属性。如果要从基类继承属性,则此批注非常重要。
@EntityListeners({AuditingEntityListener.class})启用审计。我们正在使用@CreatedDate 和 @LastModifiedDate捕获创建或修改实体的时间。这将由Spring Data JPA处理。
@JsonIdentityInfo将我们的实体转换为 JSON 时,将避免Stack Overflow错误。由于我们的实体之间的双向关系,这个注释是打破无限循环所必需的。
根据你的需求查看@JsonBackReference 并 @JsonManagedReference它们是否更符合您的要求。
我们来看看我们的大学和学生实体:
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder @FieldDefaults(level = AccessLevel.PRIVATE) @Entity @Audited public class Student extends BaseEntity{ String name; @ManyToOne University university; }
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder @FieldDefaults(level = AccessLevel.PRIVATE) @Entity @Audited public class University extends BaseEntity{ String name; String city; @OneToMany(mappedBy = "university") Set<Student> students = new HashSet<>(); }
@Audited 管理实体上的审计(跟踪更改)
配置
检查运行项目所需的配置。
Hibernate杰克逊模块
@Bean public Module hibernateModule(){ return new Hibernate5Module(); }
我们正在注册一个新的Jackson模块。Spring Boot会自动检测它并将其注册到ObjectMapperbean。
Hibernate Envers
要启用Envers审核,我们必须扩展我们的存储库RevisionRepository。
看看UniversityRepository:
public interface UniversityRepository extends RevisionRepository<University, Long, Long>, JpaRepository<University,Long> { }
StudentRepository:
public interface StudentRepository extends RevisionRepository<Student, Long, Long>, JpaRepository<Student,Long> { }
我们还必须用@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)注释我们的主类。
Spring Data Auditing
为了实现这一点,我们必须用@EnableJpaAuditing注释我们的主类。
我们来看看吧。
@SpringBootApplication @EnableJpaAuditing @EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class) public class HibernateTipsApplication { public static void main(String[] args) { SpringApplication.run(HibernateTipsApplication.class, args); } }
可以在 GitHub上 找到完整的例子 。点击标题看原文!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

关注我们,获取更多IT资讯^_^
为你推荐:
- 如何在Spring Boot中使用Hibernate Natural ID
- Spring Boot MongoDB 数据库应用技巧
- 深入 Spring Boot:从 JVM 分析 hibernate-validator NoClassDefFoundError
- 深入 JVM 分析 spring-boot 应用 hibernate-validator NoClassDefFoundError
相关软件推荐:
- 身份验证和授权 Libtrust
- 与 Netflix OSS 组件集成 Spring Cloud Netflix
- iOS 和 OS X 网络库 MBRequest
- netlink和Linux网络配置库 Pyroute2
- C++ 网络抓包和操作库 libtins
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Spring Boot实战
[美]克雷格·沃斯 / 丁雪丰 / 人民邮电出版社 / 2016-9 / 59.00元
本书以Spring应用程序开发为中心,全面讲解如何运用Spring Boot提高效率,使应用程序的开发和管理更加轻松有趣。作者行文亲切流畅,以大量示例讲解了Spring Boot在各类情境中的应用,内容涵盖起步依赖、Spring Boot CLI、Groovy、Grails、Actuator。对于Spring Boot开发应用中较为繁琐的内容,附录奉上整理完毕的表格,一目了然,方便读者查阅。一起来看看 《Spring Boot实战》 这本书的介绍吧!