繁体   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