spring mvc 提示_Spring BootHibernate提示

spring mvc 提示

1.概述

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

同样,Spring Boot是Java中功能最强大,最易于使用的框架。

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

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

2.依存关系

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

我们将使用:

  • Sprint Boot2
  • Spring Webflux
  • Spring Data JPA
  • Spring数据转换器
  • 杰克逊注释
  • Jackson数据类型Hibernate
  • H2数据库
  • Lombok

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

杰克逊注释将帮助我们避免由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.配置

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

Hibernate杰克逊模块

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

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

HibernateEnvers

为了启用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

spring mvc 提示

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

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

相关文章

异常:Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

执行 JDBC 有关代码时&#xff0c;报如下的异常&#xff1a; 原来是配置文件的内容有问题&#xff1a;

linux 端口tnpl,利用Python找出9个连续的空闲端口

这篇文章主要介绍了Python找出9个连续的空闲端口的方法&#xff0c;感兴趣的小伙伴们可以参考一下一、项目需求安装某软件&#xff0c;配置时候需要填写空闲的端口。查看5个平台的某个端口是否被占用5个平台为windows, linux, aix, hp, solaris二、实现方案有两种1、利用 pytho…

go比java快多少_Java 11快多少?

go比java快多少尽管大多数开发人员仍然使用Java 8 &#xff0c;但Java 11还是在不久前发布的。 让我们看看其中哪个对OptaPlanner更快。 找出答案的最佳方法当然是运行OptaPlanner基准测试。 本文是我们针对Java 8的类似文章的后续文章 。 基准方法 为了运行基准测试&#xff…

部署项目,所谓“部署”到底是在干什么?

第一步&#xff1a;把项目部署包放在服务器指定目录&#xff08;webapps&#xff09;下&#xff0c;让服务器可以找到项目资源&#xff1b;或者通过配置文件让服务器可以找到项目资源。 第二步&#xff1a;把项目的访问路径、资源映射等数据加载进内存中&#xff0c;这样客户端…

linux查看文件使用情况,linux查看文件句柄使用情况

Linux 3.2.0-23-generic (linux) 09/08/2014 _x86_64_ (8 CPU)02:01:55 PM dentunusd file-nr inode-nr pty-nr02:02:05 PM 38465 1568 25731 402:02:15 PM 38465 1568 25728 402:02:25 PM 38465 1536 25723 4Average: 38465 1557 25727 4输出项说明&#xff1a;kbmemfree&…

Update resources 和 Update classes and resources 的特殊情况

resources目录的文件删除了&#xff0c;不会更新部署包中的相关文件&#xff1b;但是会更新编译输出目录下的相关文件&#xff08;在 run 和 debug 模式下&#xff09; webapp 目录的文件删除了&#xff0c;不会更新部署包中的相关文件&#xff08;在 run 和 debug 模式下&…

java堆内与堆外数据交互_Java:汇总堆外数据

java堆内与堆外数据交互探索如何以最小的垃圾回收影响和最大的内存利用率创建堆​​外聚合。 使用Java Map&#xff0c;List和Object创建大型聚合通常会产生大量堆内存开销。 这也意味着&#xff0c;一旦聚合超出范围&#xff0c;垃圾收集器将必须清理这些对象。 阅读这篇简短…

linux内核cpu负载计算,CPU 负载 — The Linux Kernel documentation

CPU 负载Linux通过/proc/stat和/proc/uptime导出各种信息&#xff0c;用户空间工具如top(1)使用这些信息计算系统花费在某个特定状态的平均时间。例如&#xff1a;$ iostatLinux 2.6.18.3-exp (linmac) 02/20/2007avg-cpu: %user %nice %system %iowait %steal %idle10.01 0.00…

IntelliJ IDEA 中的Java Web项目的资源文件复制新增如何更新到部署包中?

文章目录resources目录下的文件复制新增webapp目录的文件复制新增IntelliJ IDEA 中的Java Web项目的资源文件如果复制新增&#xff0c;正常的重新部署、重启服务器、update resources&#xff0c;并不会更新到部署包中&#xff0c;必须要特殊处理才行。 resources目录下的文件…

apache.camel_Apache Camel 2.23发布

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

在linux上安装mysql5.6,在linux(Centos 7以上版本亲测)上安装mysql5.6

./scripts/mysql_install_db --usermysql --datadir/usr/local/mysql/data/mysql如果执行报错[rootdc1atmpapp12 mysql]# ./scripts/mysql_install_db --usermysql --datadir/usr/local/mysql/data/mysql FATAL ERROR: please install the following Perl modules before execu…

NewServlet ‘***Servlet‘ already exists inthis Web facet.

使用模板创建了一个 Servlet&#xff0c;创建 Servlet 时没有勾选“Create Java EE 6 annotated class”&#xff0c;再把该 Servlet 删除掉&#xff0c;再创建同名的 Servlet&#xff0c;IDEA 就会报错&#xff1a;NewServlet ‘***Servlet’ already exists in this Web face…

payara 创建 集群_Apache Payara:让我们加密

payara 创建 集群前一段时间&#xff0c;我写了一个小教程 &#xff0c;介绍如何生成“让我们加密SSL”证书并将其安装在Glassfish Java EE平台上。 这个技巧对我来说是一个奇迹&#xff0c;但是每三个月必须手动更新和重新安装证书变得很烦人。 我做了一些研究&#xff0c;并…

腾讯为什么不开发linux软件下载,你认为国产操作系统如何搭建生态?为什么腾讯不给Linux系统适配QQ?...

Linux的软件少主要是&#xff0c;十几二十年前&#xff0c;要在Linux上开发软件&#xff0c;要遵循开源协议&#xff0c;也就意味着你在上面开发个的公开应用都得开源&#xff0c;至少得公开一部分&#xff0c;所以很多商业闭源应用都绕过了Linux。现在随着Linux的分支越来越多…

Download Apache Commons BeanUtils

下载地址&#xff1a;https://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi

stripe pay_J2Pay –实施网关

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

linux l文件共享,llinux服务器文件共享的一种简单的方法

如果Centos虚拟机没有安装文件共享功能&#xff0c;那么客户端与服务器文件共享会产生一些困扰&#xff1b;这里有一个小的方法&#xff0c;可以快速实现linux服务器与windows共享&#xff1b;这里以CentOS 6.4 版本为例&#xff1b;通过xshell链接到服务器上&#xff1b;要在l…

BeanUtils的学习

BeanUtils 用于将数据封装成 JavaBean。 什么是 JavaBean 一种标准的 Java 类 要求&#xff1a; 1.类必须被public修饰 2.必须提供空参的构造器 3.成员变量必须使用private修饰 4.提供公共setter和getter方法 功能&#xff1a; JavaBean用于封装数据 主要的方法 popular&a…

java方法可选参数_Java可选参数

java方法可选参数在Java类中设计方法时&#xff0c;某些参数对于其执行而言可能是可选的。 无论是在DTO&#xff0c;胖模型域对象还是简单的无状态服务类中&#xff0c;可选方法参数都是常见的。 从本文中&#xff0c; 您将学习如何在Java中处理可选参数 。 我们将专注于常规方…

linux清空串口接收buff,openwrt解除console对串口的占用

console对串口的占用openwrt会将串口配置成console便于用户控制&#xff0c;以本人使用的WNDR4300为例打开盒子后可以看到一个串口被引出&#xff0c;开机后能够打印bootloder以及linux的启动日志。在启动到一定阶段之后可以作为console登陆有时候希望自己的程序占用串口来发送…