[英]Spring boot autoconfiguration not working properly with spring-data-jpa
我有一個很小的spring boot應用程序(僅是概念證明),它針對H2內存數據庫運行,並使用spring-data-jpa處理持久性。 它由一個REST API組成,該API允許處理帖子和評論,因此您可以創建和檢索帖子和評論。 該應用程序具有兩個JPA實體Post
和Comment
,而我面臨的問題是,在添加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.