Spring Boot休眠提示

1.概述

Hibernate不需要介绍。 它是Java中最受欢迎的ORM。

同样,Spring Boot是目前最强大,最易于使用的Java框架。

本教程与Hibernate或Spring Boot无关,其中有大量的内容。

我们将研究在将它们一起使用时可能会遇到的一些常见错误以及如何修复它们。

2.依存关系

我们将使用Gradle构建我们的项目。 我建议使用Spring Initializr引导您的项目。

我们将使用:

  • Spring靴2
  • Spring Webflux
  • Spring Data JPA
  • Spring数据转换器
  • 杰克逊注释
  • Jackson数据类型休眠
  • H2数据库
  • Lombok

Spring Data Envers允许我们访问Hibernate Envers管理的实体修订。

Jackson批注将帮助我们避免由JPA关系引起的常见堆栈溢出错误。

Jackson DataType Hibernate模块将帮助您处理Hibernate类型和延迟加载方面。

我们将在一段时间内仔细研究所有这些内容。

buildscript {ext {springBootVersion = '2.0.6.RELEASE'}
...
}dependencies {implementation('org.springframework.boot:spring-boot-starter-data-jpa')implementation('org.springframework.boot:spring-boot-starter-webflux')implementation("org.springframework.data:spring-data-envers")implementation("com.fasterxml.jackson.core:jackson-annotations:2.9.7")implementation("com.fasterxml.jackson.datatype:jackson-datatype-hibernate5:2.9.7")runtimeOnly('com.h2database:h2')compileOnly('org.projectlombok:lombok')
...
}

我们将使用H2来运行我们的项目。

3.实体

在此示例中,我们将使用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@GeneratedValueLong id;@CreatedDateLocalDateTime createdAt;@LastModifiedDateLocalDateTime updatedAt;
}

您可以注意到的一件事是,我没有在课程上使用Lombok的@Data批注。 @Data批注会自动添加@ToString批注,这可能会导致堆栈溢出错误。 因此,最好手动管理注释。

@MappedSuperclass批注允许实体从基类继承属性。 如果要从基类继承属性,则此批注非常重要。

@EntityListeners({AuditingEntityListener.class})启用审核。 我们使用@CreatedDate@LastModifiedDate来捕获创建或修改实体的时间。 Spring Data JPA将对此进行照顾。

将我们的实体转换为JSON时, @JsonIdentityInfo将避免堆栈溢出错误。
由于我们实体之间的双向关系,需要使用此注释来打破无限循环。

您可能还想查看@JsonBackReference@JsonManagedReference以了解它们是否更符合您的要求。

让我们来看看我们的大学和学生实体。

@Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder @FieldDefaults(level = AccessLevel.PRIVATE)
@Entity @Audited
public class Student extends BaseEntity{String name;@ManyToOneUniversity 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管理该实体上的审核(跟踪更改)。

4.配置

让我们检查运行项目所需的配置。

休眠杰克逊模块

@Bean
public Module hibernateModule(){return new Hibernate5Module();
}

我们正在注册一个新的Jackson模块。
Spring Boot将自动检测它并将其注册到ObjectMapper Bean。

休眠Envers

为了启用Envers审核,我们必须使用RevisionRepository扩展我们的存储库。

让我们看看我们的UniversityRepository

public interface UniversityRepository extends RevisionRepository<University, Long, Long>, JpaRepository<University,Long> {
}

我们必须对StudentRepository同样进行此StudentRepository

public interface StudentRepository extends RevisionRepository<Student, Long, Long>, JpaRepository<Student,Long> {
}

我们还必须使用@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)注释我们的主类。

在经历了我们需要的其他注释之后,我们将在一段时间内查看主类。

Spring数据审核

为此,我们必须使用@EnableJpaAuditing注释我们的主类。

让我们看看。

@SpringBootApplication
@EnableJpaAuditing
@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)
public class HibernateTipsApplication {public static void main(String[] args) {SpringApplication.run(HibernateTipsApplication.class, args);}
}

5.结论

我试图通过一个简单的示例解释如何使用Spring Boot&Hibernate创建REST应用程序。

这可能会解决您的某些堆栈溢出错误。
否则,您可能要考虑编写自己的数据传输对象(DTO)。

如果您需要对核心Hibernate ORM不支持的数据类型的支持,则可能需要签出该库 。

您可以阅读有关以下内容的更多信息:

  • Spring Data JPA

您可以在Github上找到完整的示例。

翻译自: https://www.javacodegeeks.com/2019/01/spring-boot-hibernate-tips.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux自动挂载fcoe存储,在sdb上挂载USB 设备

在主机上挂载 USB 设备后我们查看系统当前磁盘设备&#xff1a;1. [rootFCoE ~]# fdisk -l2.3. Disk /dev/sda: 43.0 GB, 42991616000 bytes4. 255 heads, 63 sectors/track, 5226 cylinders5. Units cylinders of 16065 * 512 8225280 bytes6. Sector size (logical/physica…

linux gui编程语言,使用 Red 语言编写 GUI 应用程序

一句话概括 — 使用 Red 语言编写原生跨平台桌面 GUI。尝试在 Windows 上使用 PyInstaller 将“可执行”的 ducktape 封装在 Python 脚本之后&#xff0c;我发现应该学习的编程语言类应该具有以下属性&#xff1a;静态二进制编译(产生一个二进制&#xff0c;不是运行时的字节码…

java 开发人员工具_Java开发人员的5种工具

java 开发人员工具改善我们编写的Java代码的一种方法是使用最好的工具。 因此&#xff0c;让我们看看IDR Solutions建议使用的5种最常用的工具来帮助Java开发人员编写更好的代码。 查找错误 FindBugs是一个开放源代码程序&#xff0c;根据Lesser GNU Public许可的条款进行分发…

64位linux并行计算大气模型效率优化研究,64位Linux并行计算大气模型效率优化研究...

第&#xff12;&#xff16;卷第&#xff16;期&#xff12;&#xff10;&#xff10;&#xff19;年&#xff16;月计算机应用研究&#xff21;&#xff50;&#xff50;&#xff4c;&#xff49;&#xff43;&#xff41;&#xff54;&#xff49;&#xff4f;&#xff4e;&a…

J2Pay –实施网关

介绍 如果您使用任何网关&#xff0c;您都可以在我们的库中实现该网关并支持开放源代码世界&#xff0c;我们将非常高兴地欢迎贡献者。 您可以在这里找到我们的github存储库 在开始实现网关之前&#xff0c;您应该首先看到其他一些类。 以下是简要定义的类。 HTTP客户端 使…

linux中jq的使用方法,linux使用jq工具解析json

jq类似一个awk或grep一样的神器&#xff0c;可以方便地在命令行操作json一、安装官网&#xff1a;https://stedolan.github.io/jq/download/基本就是brew install、apt install、yum install之类的&#xff0c;很简单二、常用操作1.格式化json直接请求格式如下&#xff0c;不易…

linux手机摩托,Linux操作系统触控智能机 摩托ZN4图赏

北京时间2008年11月25日&#xff0c;有国外的网友拿到由通信运营商Verizon Wireless定制的摩托罗拉ZN4真机。摩托罗拉ZN4的发布已经过了一个多月了&#xff0c;网友们对于这款手机的评论可谓是褒贬不一。有的朋友们指出摩托罗拉ZN4在造型上面抄袭了经典“明”系列设计&#xff…

Apache Camel 2.23发布

昨天发布了Apache Camel 2.23 &#xff0c;其中最值得注意的新功能是对Spring Boot 2.1的支持&#xff0c;我们还改进了启动器组件以包括更多的元数据&#xff0c;并对改进的Spring Boot自动配置进行了优化。 此版本主要是一个大的错误修复版本和一些其他小的新增功能。 这些功…

对c语言字符数组描述错误的是,下述对C语言字符数组的描述中错误的是( )。

摘要&#xff1a;条形图用频率值型来表分组分布示数数据&#xff0c;下述没有相邻之间间隔竖条。中国:在中大学列联分析&#xff0c;字符百分表的条件正确关于的是方向说法。条形图用频率值型来表分组分布示数数据&#xff0c;数组述中没有相邻之间间隔竖条。...条形图用频率值…

android 实现自动拍照,Android自定义相机实现定时拍照功能

这篇博客为大家介绍Android自定义相机&#xff0c;并且实现倒计时拍照功能。首先自定义拍照会用到SurfaceView控件显示照片的预览区域&#xff0c;以下是布局文件&#xff1a;activity_main.xmlandroid:layout_width"match_parent"android:layout_height"match_…

10个步骤的筛选器模式

过滤器是仅在某些情况下应应用的模式。 在原始帖子中 &#xff0c;我提供了一个非常简单的示例&#xff0c;旨在演示如何应用它。 在这篇文章中&#xff0c;我提供了一个更详细的示例&#xff0c;该示例还旨在说明何时以及为什么应用它。 介绍 该职位包括以下10个简短步骤 。…

android 网络调试工具,安卓网络调试助手

安卓网络调试助手源码是一款专门为专业人士准备的安卓网络调试软件&#xff0c;安卓网络调试助手apk支持各种进制的转换发生和多种端口协议&#xff0c;让用户操作起来更加方便&#xff0c;安卓网络调试助手源码有着专业的操作流程&#xff0c;帮助用户快速上手&#xff0c;就算…

android版本8.1.0和9的区别,安卓8.1和9.0的区别是什么

安卓8.1和9.0的主要差别是&#xff1a;流畅度、耗电量、功能等等方面的不同。在手机配置足够的情况下&#xff0c;9.0要比8.1更流畅和省电&#xff0c;它可以同时让后台保持更多APP&#xff0c;每个APP运行的时候更加流畅&#xff0c;其新的智能电量管理功能、暗黑模式让手机更…

看到一个沙粒世界:再一次你好世界

“看到一个沙粒中的世界”&#xff0c;我们很可能会看到最简单的“ Hello World”中的世界&#xff0c;所以我们开始吧&#xff0c;再一次向世界问好。 我猜所有的Java课程&#xff0c;教程都是从这个著名的Hello World程序开始的&#xff0c;这是我可以在没有IDE的帮助下编写…

[渝粤教育] 西南科技大学 中国现代文学 在线考试复习资料

中国现代文学——在线考试复习资料 一、单选题 1.不属于“五四”时期的“问题小说”作家的是( )。 A.冰心 B.庐隐 C.刘呐鸥 D.王统照 2.巴金小说《家》中的觉新是( )。 A.顽固的封建卫道者 B.腐朽堕落者 C.有新思想的懦弱者 D.与封建思想大胆斗争的反抗者 3.《画梦录》的作者…

[渝粤教育] 西南科技大学 中学英语教材教法 在线考试复习资料

中学英语教材教法——在线考试复习资料 一、单选题 1.关于写作评估以下说法正确的是? A.写作评估既要有结果评估,也要有过程评估 B.写作教学评估有写长法又有写短法 C.课堂评估的作用仅为监控学生 D.课堂评估与课堂的具体教学内容有关,可以使用统一的评估模式 2.以下哪种方式…

moreunit_MoreUnit与MoreUnit

moreunit就在一年多以前&#xff0c;我写了一篇关于在Eclipse中使用JUnit的文章。 评论者之一推荐MoreUnit &#xff0c;以进一步提高测试效率。 尝试一下让我感到很高兴&#xff0c;并且我的自主神经系统立即记住了该插件的键盘快捷键…… 另外&#xff0c;在使用MoreUnit一段…

[渝粤教育] 西南科技大学 人力资源管理 在线考试复习资料(1)

人力资源管理——在线考试复习资料 一、单选题 1.实施工作轮换方案之前要做好的工作不包括( ) A.复查每一个连续在同一职业岗位上于了5年以上.特别是更长时间的、正处于职业中期的员工(包括经理在内) 的人事文件 B.评价这些员工的工作,认清其工作专长,了解其个人特征、才干等 C…

android 获取 meid 代码,Android 各个版本获取IMEI、MEID

public class IMEIUtil {/*** 获取默认的imei 一般都是IMEI 1** param context* return*/public static String getIMEI1(Context context) {//优先获取IMEI(即使是电信卡) 不行的话就获取MEIDreturn getImeiOrMeid(context, 0);}/*** 获取imei2** param context* return*/publ…

JMetro版本5发布

Java的第5版JavaFX主题JMetro刚刚发布。 这是此版本中的新功能&#xff1a; 新的文本区域明暗风格&#xff1b; 现有控件样式的一些更改&#xff1b; 新CSS变量称为accent_color。 顾名思义&#xff0c;它允许您定义JMetro控件中使用的强调颜色。 已经进行了很大的重构&am…