【问题标题】:Error creating bean with name 'entityManagerFactory' defined : Java8创建定义名称为“entityManagerFactory”的bean时出错:Java8
【发布时间】:2020-09-15 12:59:13
【问题描述】:

在我的 D1 模型中:

import javax.persistence.Column;
import javax.persistence.Id;
public class D1 
{
    @Id
    @Column(name = "id_client")
    private BigDecimal id_contrats;

    @Column(name = "name_client")
    private Timestamp dat_deb_dwh;

}

在 D1Repository 中

import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import io.A1.B1.api.P1.data.model.D1;

@Entity(name = "tmp.c1")
@Table(name = "c1", schema="tmp") 
public interface D1Repository 
{
    @Query(value = "SELECT * FROM #{#entityName} )
    T getId(@Param("id_client") BigDecimal id_client);

}

我收到此错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: io.A1.B1.api.P1.repository.D1Repository
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1778) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at io.A1.B1.api.App.main(App.java:13) [classes/:na]

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: io.A1.B1.api.P1.repository.D1Repository
    at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:266) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
    at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:211) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:775) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:250) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:231) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:274) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:904) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:935) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) ~[spring-orm-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) ~[spring-orm-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) ~[spring-orm-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    ... 16 common frames omitted

如果你能帮上忙,请不要犹豫。

谢谢

【问题讨论】:

  • 查看堆栈跟踪,它说“嵌套异常是 org.hibernate.AnnotationException:没有为实体指定标识符:io.A1.B1.api.P1.repository.D1Repository”
  • @f1sh 感谢您的回复,我编辑了我的原始帖子以更具体,请看一下 :)
  • 你的D1Repository不是实体,所以不应该这样注释,D1是,所以应该注释。
  • [1] 对于那些投票将其作为副本关闭的人,链接的副本有十个答案,没有一个被接受。鉴于此,将这个问题作为副本关闭实际上如何帮助 OP 解决他们的问题? [2] 更一般地说,仅仅因为一个问题提到与现有问题相同的错误,这不会自动使其重复。 [3] 如果您投票决定将此问题作为重复问题结束,请同时指定链接副本中哪个答案是相关的。

标签: java spring


【解决方案1】:

您需要添加 @Entity 来指定这是一个实体,并添加 @Table(name = "insert_table_name") 来指定它与类顶部的数据库表的关系。

@Entity
@Table(name = "c1", schema="tmp") 
public class D1 
{
    @Id
    @Column(name = "id_client")
    private BigDecimal id;

    @Column(name = "name_client")
    private Timestamp dat_deb_dwh;

}

public interface D1Repository extends CrudRepository<D1, BigDecimal>
{

    D1 findById(BigDecimal id_client);

}

【讨论】:

  • 感谢您的回复。实体和表也被添加并且错误仍然存​​在。我已经编辑了我的原始帖子,请看一下
  • 您需要将注释添加到您的实体 (D1),而不是存储库。
  • 我在 D1 模型之前添加了这些行,但仍然有错误 import javax.persistence.Entity;导入 javax.persistence.Table; @Entity(name = "tmp.c1") @Table(name = "c1", schema="tmp")
  • 是的,我也这样做了@ntholi,我添加了 import javax.persistence.Entity;导入 javax.persistence.Table; @Entity(name = "tmp.c1") @Table(name = "c1", schema="tmp") 在我的 D1 模型类之前,但仍然出现相同的错误
  • 我已经通过一些更正更新了我的原始答案,从实体注释中删除了名称参数,在您的存储库中扩展了 CrudRepository 并更改了查询以反映 Spring Data JPA 标准。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 2020-07-12
  • 1970-01-01
  • 2018-01-13
  • 2020-03-25
  • 2018-02-18
相关资源
最近更新 更多