簡體   English   中英

Spring Boot自動配置無法與spring-data-jpa一起正常工作

[英]Spring boot autoconfiguration not working properly with spring-data-jpa

我有一個很小的spring boot應用程序(僅是概念證明),它針對H2內存數據庫運行,並使用spring-data-jpa處理持久性。 它由一個REST API組成,該API允許處理帖子和評論,因此您可以創建和檢索帖子和評論。 該應用程序具有兩個JPA實體PostComment ,而我面臨的問題是,在添加Comment實體之后,該應用程序無法啟動,但是在我剛擁有Post實體時添加Comment之前,該應用程序已啟動並通過了測試。 看來Spring Boot無法正確地自動配置JPA。

這是我得到的錯誤:

[錯誤] shouldReturnNullForNotExistingPost(com.devskiller.tasks.blog.service.PostServiceTest)經過的時間:0.001 s <<<錯誤!

java.lang.IllegalStateException:無法加載ApplicationContext

由以下原因引起:org.springframework.beans.factory.BeanCreationException:創建在類路徑資源[org / springframework / boot / autoconfigure / orm / jpa / HibernateJpaConfiguration.class]中定義的名稱為'entityManagerFactory'的bean時出錯:調用init方法失敗; 嵌套的異常是javax.persistence.PersistenceException:[PersistenceUnit:默認]無法構建Hibernate SessionFactory。 嵌套的異常是org.hibernate.MappingException:無法確定com.devskiller.tasks.blog.model.Post的類型,在表:注釋處,對於列:[org.hibernate.mapping.Column(post)]

由以下原因引起:javax.persistence.PersistenceException:[PersistenceUnit:默認]無法構建Hibernate SessionFactory;無法創建Hibernate SessionFactory。 嵌套的異常是org.hibernate.MappingException:無法確定com.devskiller.tasks.blog.model.Post的類型,在表:注釋處,對於列:[org.hibernate.mapping.Column(post)]

原因:org.hibernate.MappingException:無法確定com.devskiller.tasks.blog.model.Post的類型,在表:注釋處,對於列:[org.hibernate.mapping.Column(post)]

Post實體:

@Entity
public class Post {

    @Id
    @GeneratedValue
    private Long id;

    private String title;

    @Column(length = 4096)
    private String content;

    private LocalDateTime creationDate;    

    // Getters and setters

Comment實體:

@Entity
public class Comment {
    @Id
    @GeneratedValue
    private Long id;

    private String author;

    private String content;

    private Post post;

    // Getters and setters

解決方案:@OneToOne注釋添加到Comment.post字段后,錯誤消失。 但為什么? 我認為,根據JPA規范,沒有必要添加此批注以在默認配置下在兩個實體之間創建單向關系。 不是嗎?

@GeneratedValue(strategy = GenerationType.AUTO)

@GeneratedValue(strategy = GenerationType.IDENTITY)

@GeneratedValue(strategy = GenerationType.SEQUENCE)

@GeneratedValue(strategy = GenerationType.TABLE)

@GeneratedValue(strategy = GenerationType.TABLE, generator = "book_generator")
@TableGenerator(name="book_generator", table="id_generator", schema="bookstore")

嘗試將您的生成策略更改為上述任何一種。 您似乎尚未為框架指定任何方法來識別生成策略。

請參閱下面的鏈接以獲取詳細說明https://thoughts-on-java.org/jpa-generate-primary-keys/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM