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 提示

spring mvc 提示_Spring BootHibernate提示相关推荐

  1. spring mvc原理_Spring MVC的工作原理,我们来看看其源码实现

    来源:https://www.cnblogs.com/youzhibing/p/10695012.html 作者:youzhibing2904 遗留问题 在关于利用maven搭建ssm的博客,我们一起 ...

  2. spring mvc原理_Spring常见问题整理

    一.为什么要使用 spring? 1.Spring简介 spring 是一个开源的轻量级 JavaBean 容器框架.使用 JavaBean 代替 EJB ,并提供了丰富的企业应用功能,降低应用开发的 ...

  3. spring mvc教程_Spring MVC教程

    spring mvc教程 1.简介 作为企业Java开发人员,这项工作的主要重点之一是开发Web应用程序. 对于Web应用程序,后果还包括许多挑战. 具体来说,其中一些是状态管理,工作流和验证. HT ...

  4. spring mvc拆分_Spring集成–强大的拆分器聚合器

    spring mvc拆分 健壮是什么意思? 在本文的上下文中,健壮性是指在不立即返回给调用者的情况下管理流中的异常条件的能力. 在某些处理方案中, n个 m个回答足以做出结论. 通常具有这些趋势的示例 ...

  5. spring mvc重定向_Spring的Web MVC –重定向到内存泄漏

    spring mvc重定向 他们说一块岩石会引起雪崩. 最近,我的一位同事Marcin Radoszewski给了我一块岩石. 您可能永远不会猜到它是什么,但是有机会在许多Web应用程序中使用它. 请 ...

  6. spring mvc 教程_Spring MVC开发–快速教程

    spring mvc 教程 这是我们的JCG合作伙伴之一,来自Manoj的有关使用Spring开发Web应用程序的简短教程, 网址为" The Khangaonkar Report &quo ...

  7. spring mvc示例_Spring MVC示例

    spring mvc示例 Welcome to Spring MVC Example. Sometime back in Spring MVC Tutorial, I explained how to ...

  8. spring mvc国际化_Spring MVC国际化(i18n)和本地化(L10n)示例

    spring mvc国际化 Welcome to the Spring Internationalization (i18n) tutorial. Any web application with u ...

  9. java spring mvc 实例_spring mvc 简单实例

    转至:http://blog.csdn.net/dingx/article/details/2242105 Spring Framework可以被使用在很多场合之中,考虑到目前大多数Java EE的项 ...

最新文章

  1. Android 之Tasks和Back Stack(任务和返回栈)
  2. 考研961数据结构c语言版真题,严蔚敏数据结构C语言版考研真题库
  3. [scikit-learn 机器学习] 4. 特征提取
  4. 软件测试都有哪些证书,软件测试都有哪些证书呀?有用吗?
  5. paypal账户授权返回_OAuth授权|精选博客
  6. 关于PHOTO SHOP CS9.0无法启动adobe updater 请重新安装应用程序和组件解决方法!
  7. linux结课考试试题,Linux认证考试课后基础试题及答案
  8. 精通Java事务编程(3)-弱隔离级别之快照隔离和可重复读
  9. HTML表格边框空隙
  10. 5GC基础:架构和网元
  11. java实现模拟时钟表盘
  12. 微博评论点赞mysql设计_微博点赞功能设计得是否合理?
  13. 《Neural Collaborative Filtering》NCF模型的理解以及python代码
  14. Docker网络、容器编排
  15. spacemacs org-mode配置GTD
  16. 计算机网络---数据链路层PPP协议
  17. 电脑QQ登录测试用例
  18. java判断年份_java判断年份 月份的天数
  19. python爬虫爬取天气数据并图形化显示
  20. signature=b8cae5ae994df93c3fedf622c2a51ac5,javascript中的Base64、UTF8编码与解码详解

热门文章

  1. 牛客题霸 [ 岛屿数量] C++题解/答案
  2. [ZJOI2014] 璀璨光华(bfs建图 + dfs搜索)
  3. 数论三之组合数学Ⅰ-Max-Min Sums,Binomial Coefficient is Fun,Strivore,Bubble Sort,放棋子,LOJ6671,Iroha and a Grid
  4. YBTOJBZOJ:大根堆(启发式合并)
  5. jzoj3169-[GDOI2013模拟4]生产汽车【斜率优化dp,单调队列,二分】
  6. P3830-[SHOI2012]随机树【数学期望,dp】
  7. ssl1203-书的复制【dp】
  8. 【Floyed】廉价最短路径
  9. MongoDB新建或删除索引
  10. Scala与Java差异(五)之Map与Tuple