Spring Boot自动配置无法与spring-data-jpa

时间:2019-03-14 05:57:40

标签: java spring hibernate spring-boot spring-data-jpa

我有一个很小的spring boot应用程序(仅是概念证明),它针对H2内存数据库运行,并使用spring-data-jpa处理持久性。它由一个REST API组成,该API允许处理帖子和评论,因此您可以创建和检索帖子和评论。 该应用程序具有两个JPA实体PostComment,而我面临的问题是,在添加Comment实体之后,该应用程序无法启动,但是在添加{{1}之前}当我只有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时出错。方法失败;嵌套的异常是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。嵌套的异常是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实体:

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字段后,错误消失。但为什么?我认为,根据JPA规范,没有必要添加此批注以在默认配置下在两个实体之间创建单向关系。不是吗?

1 个答案:

答案 0 :(得分:0)

@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/