javascript
spring mvc 提示_Spring BootHibernate提示
spring mvc 提示
1.概述
Hibernate無需介紹。 它是Java中最受歡迎的ORM。
同樣,Spring Boot是Java中功能最強大,最易于使用的框架。
本教程與Hibernate或Spring Boot無關,其中有大量的內(nèi)容。
我們將研究在將它們一起使用時可能會遇到的一些常見錯誤以及如何修復它們。
2.依存關系
我們將使用Gradle構建我們的項目。 我建議使用Spring Initializr引導您的項目。
我們將使用:
- Sprint Boot2
- Spring Webflux
- Spring Data JPA
- Spring數(shù)據(jù)轉換器
- 杰克遜注釋
- Jackson數(shù)據(jù)類型Hibernate
- H2數(shù)據(jù)庫
- Lombok
Spring Data Envers允許我們訪問Hibernate Envers管理的實體修訂。
杰克遜注釋將幫助我們避免由JPA關系引起的常見堆棧溢出錯誤。
Jackson DataType Hibernate模塊將幫助您處理Hibernate類型和延遲加載方面。
我們將在一段時間內(nèi)仔細研究所有這些內(nèi)容。
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創(chuàng)建大學和學生。
將常見的邏輯和屬性存儲在超類中總是一個好主意。
我們將為我們的實體創(chuàng)建一個超類并在其中存儲通用屬性。
讓我們看一下我們的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來捕獲創(chuàng)建或修改實體的時間。 Spring Data JPA將對此進行照顧。
將我們的實體轉換為JSON時, @JsonIdentityInfo將避免堆棧溢出錯誤。
由于我們實體之間的雙向關系,需要使用此注釋來打破無限循環(huán)。
您可能還想查看@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)注釋主類。
在經(jīng)歷了我們需要的其他注釋之后,我們將在一段時間內(nèi)查看主類。
Spring數(shù)據(jù)審核
為此,我們必須使用@EnableJpaAuditing注釋我們的主類。
讓我們看看。
@SpringBootApplication @EnableJpaAuditing @EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class) public class HibernateTipsApplication {public static void main(String[] args) {SpringApplication.run(HibernateTipsApplication.class, args);} }5.結論
我已經(jīng)嘗試通過一個簡單的示例解釋如何使用Spring Boot&Hibernate創(chuàng)建REST應用程序。
這可能會解決您的某些堆棧溢出錯誤。
否則,您可能要考慮編寫自己的數(shù)據(jù)傳輸對象(DTO)。
如果您需要對核心Hibernate ORM不支持的數(shù)據(jù)類型的支持,則可能需要簽出該庫 。
您可以閱讀有關以下內(nèi)容的更多信息:
- Spring Data JPA
您可以在Github上找到完整的示例。
翻譯自: https://www.javacodegeeks.com/2019/01/spring-boot-hibernate-tips.html
spring mvc 提示
總結
以上是生活随笔為你收集整理的spring mvc 提示_Spring BootHibernate提示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 厂房备案到哪里备案(备案的厂房)
- 下一篇: 怎么隐藏邮件ip(怎么隐藏邮件收件人)