【问题标题】:UnknownEntityTypeException: Unable to locate persisterUnknownEntityTypeException:无法找到持久性
【发布时间】:2018-07-25 07:34:32
【问题描述】:

我想在 Wildfly 上使用 JPA 和 Spring。我试过这个配置:

application.properties:

spring.jmx.enabled=false
spring.datasource.jndi-name=java:/global/production
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.show-sql = true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect
spring.jpa.hibernate.ddl-auto = create-drop

POM 文件:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath />
    </parent>

    <dependencies>   
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-jaxb-annotations</artifactId>
            <version>2.9.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>                
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>       
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>

配置:

@Configuration
@ComponentScan("org.rest.api.server.*")
public class AppConfig {

    @Bean
    public EntityManager entityManager(EntityManagerFactory emf) {
        return emf.createEntityManager();
    }
}

但是当我尝试执行查询时,我得到:

Caused by: org.hibernate.UnknownEntityTypeException: Unable to locate persister: org.rest.api.server.repository.Terminals
10:28:27,539 ERROR [stderr] (default task-1)    at org.hibernate.metamodel.internal.MetamodelImpl.locateEntityPersister(MetamodelImpl.java:642)

配置实体的正确方法是什么?可能我需要手动映射它?

【问题讨论】:

    标签: java spring jpa spring-data-jpa


    【解决方案1】:

    当实体没有被拾取,并且没有通过 spring boot 自动配置创建或映射数据库表时,会引发此错误。 为了解决这个问题,你需要添加 @EntityScan(basePackages = {"**entities_package_name"}) 在 Spring Boot 应用程序类中低于 @SpringBootApplication

    package com.bill.app;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.domain.EntityScan;
    
    @SpringBootApplication
    @EntityScan( basePackages = {"com.bill.entity"} ) // entities package name
    public class BillWebApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(BillWebApplication.class, args);
        }
    }
    

    【讨论】:

      【解决方案2】:

      这就是我配置 entityManager 的方式。您传递的 dataSource 是配置中的另一个 bean。你可以看看 BasicDataSource。

      @Bean
      public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
          LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
          em.setDataSource(dataSource);
          em.setJpaDialect(new HibernateJpaDialect());
          em.setPackagesToScan("org.rest.api.server.folder");
          JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); // JPA implementation
          em.setJpaVendorAdapter(vendorAdapter);
          return em;
      }
      

      【讨论】:

        【解决方案3】:

        您可以使用 @EntityScan() 注释让 spring 找到实体类。用法类似于@ComponentScan

        @EntityScan docs

        【讨论】:

          【解决方案4】:

          当您的 persistence.xml 文件缺少您尝试使用的某些实体时,可能会发生此错误。

          【讨论】:

            猜你喜欢
            • 2015-11-18
            • 2022-10-04
            • 2018-02-22
            • 1970-01-01
            • 1970-01-01
            • 2018-02-25
            • 1970-01-01
            • 1970-01-01
            • 2021-03-24
            相关资源
            最近更新 更多