Spring Data JPA:类路径资源[]无法解析为URL,因为它不存在

o

我是Spring的新手,但是我决定将Spring-Data-JPA用于个人项目。我开始遵循“使用JPA访问数据”教程,但进行了自己的修改。(如下所示)

运行我的代码时,出现异常:

...
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class dal.access.DBAccess: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: Unable to resolve persistence unit root URL
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1548)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84)
    at dal.test.Application.main(Application.java:20)
    ... 6 more
Caused by: javax.persistence.PersistenceException: Unable to resolve persistence unit root URL
    at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.determineDefaultPersistenceUnitRootUrl(DefaultPersistenceUnitManager.java:529)
    at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.preparePersistenceUnitInfos(DefaultPersistenceUnitManager.java:402)
    at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.afterPropertiesSet(DefaultPersistenceUnitManager.java:384)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:285)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:317)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1607)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1544)
    ... 17 more
Caused by: java.io.FileNotFoundException: class path resource [] cannot be resolved to URL because it does not exist
    at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:178)
    at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.determineDefaultPersistenceUnitRootUrl(DefaultPersistenceUnitManager.java:526)
    ... 23 more

此异常类似于此处似乎已解决较早的帖子,这就是为什么我不确定是否相同的情况...

也许我使用的是旧的春季产品,所以我的“ build.gradle”文件如下所示:

buildscript {
    repositories {
        maven { url "http://repo.spring.io/libs-milestone" }
        mavenLocal()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:0.5.0.M6")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'spring-boot'

sourceSets {
    main {
        java {
            srcDirs = ["src"]
        }
    }
}

jar {
    baseName = 'dal-jar-test'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/libs-milestone" }
    maven { url "https://repository.jboss.org/nexus/content/repositories/releases" }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:0.5.0.M6")
    compile("org.springframework:spring-orm:4.0.0.RC1")
    compile("org.springframework.data:spring-data-jpa:1.4.1.RELEASE")
    compile("org.hibernate:hibernate-entitymanager:4.2.1.Final")
    compile("com.h2database:h2:1.3.172")
    testCompile("junit:junit:4.11")
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.8'
}

我的代码如下:

POJO类:

package dal.entities;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class EntityA {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long    id;
    private String  firstName;
    private String  lastName;

    protected EntityA() {}

    public EntityA(String firstName, String lastName) {
        this.firstName  =   firstName;
        this.lastName   =   lastName;
    }

    @Override
    public String toString() {
        return String.format("EntityA[id=%d, firstName='%s', lastName='%s']",
                             id,firstName,lastName);
    }
}

接口:

package dal.repositories;

import java.util.List;

import org.springframework.data.repository.CrudRepository;

import dal.entities.EntityA;

public interface EntityARepository extends CrudRepository<EntityA, Long> {
    List<EntityA> findByLastName(String lastName);
}

访问层:

package dal.access;

import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;

public class DBAccess {

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
                        .setType(EmbeddedDatabaseType.H2).build();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
        LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
        lef.setDataSource(dataSource);
        lef.setJpaVendorAdapter(jpaVendorAdapter);
        lef.setPackagesToScan("dal.repositories");

        return lef;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setShowSql(false);
        hibernateJpaVendorAdapter.setGenerateDdl(true);
        hibernateJpaVendorAdapter.setDatabase(Database.H2);

        return hibernateJpaVendorAdapter;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new JpaTransactionManager();
    }
}

最后是主班:

package dal.test;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import dal.access.DBAccess;
import dal.entities.EntityA;
import dal.repositories.EntityARepository;

@Configuration
@EnableJpaRepositories
public class Application {

    public static void main(String[] args) {
        AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(DBAccess.class);
        EntityARepository repositoryA = ctx.getBean(EntityARepository.class);

        // save a couple entities
        repositoryA.save(new EntityA("boy", "boy"));
        repositoryA.save(new EntityA("girl", "girl"));

        // fetch all entities
        Iterable<EntityA> As = repositoryA.findAll();
        for (EntityA entityA : As) {
            System.out.println(entityA);
        }

        ctx.close();
    }
}

从代码中可以看到,每个类都位于不同的包中。(也许这是问题所在,因为当我在同一个程序包中创建所有类时,一切都可以正常运行)使用Java命令行运行gradle生成的jar时,出现了异常。

有人能帮我吗?

谢谢!

马克·布拉姆尼克

根据您提供的示例和Spring数据示例项目:

如果将实体放入不同的程序包中,则应在spring应该在其中寻找这些实体的程序包中明确指定程序包,它不能真正扫描所有项目,因为从性能和内存消耗角度来看,这都是不合理的。

因此,在您的示例中,实体存在于“ dal.entities”包中。您应该像这样配置LocalContainerEntityManagerManagerFactoryBean:

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
    LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
    lef.setDataSource(dataSource);
    lef.setJpaVendorAdapter(jpaVendorAdapter);
    lef.setPackagesToScan("dal.entities"); // !!! you might want to place here more than one package, its vararg
    return lef;
}

我已经下载了示例项目(我没有gradle,所以我使用过maven build),将实体放置在不同的程序包中并且可以正常工作)。

如果您不想像这样配置您的东西,则可能需要考虑创建一个持久化xml,该XML将指定这些实体的列表,但情况完全不同。

希望这可以帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring Data JPA:类路径资源[]无法解析为URL,因为它不存在

来自分类Dev

Spring Boot 1.4:类路径资源[]无法解析为URL,因为它不存在

来自分类Dev

找不到Spring类路径资源,因为它不存在

来自分类Dev

找不到Spring类路径资源,因为它不存在

来自分类Dev

添加了新的bean.xml并获取具有根本原因的类路径资源[Spring-Mail.xml]无法打开,因为它不存在]

来自分类Dev

IOException从类路径资源解析XML文档-文件不存在-Spring

来自分类Dev

Hibernate:无法打开类路径资源,因为它不存在

来自分类Dev

无法打开类路径资源[pointsconfig.properties],因为它不存在

来自分类Dev

Spring Data JPA查询不起作用,列不存在

来自分类Dev

忽略表Spring Data JPA中的列(如果不存在)

来自分类Dev

Spring Data JPA 表连接创建操作符不存在错误

来自分类Dev

spring-data-couchbase对不存在的文档抛出DocumentDoesNotExistException

来自分类Dev

当条目尚不存在时,Spring Data 插入数据

来自分类Dev

如何在Spring MVC中为不存在的资源设置URL映射?

来自分类Dev

Spring Data Jpa - 缓存

来自分类Dev

Spring Data JPA @OneToMany

来自分类Dev

如何解决不存在的类上的Spring Data Neo4j Rest依赖关系

来自分类Dev

具有Spring Data JPA的Spring MVC

来自分类Dev

无法配置Spring Data JPA:指定的类是接口

来自分类Dev

Spring Data JPA和存在查询

来自分类Dev

Spring Data Rest基本路径

来自分类Dev

Spring-Data-JPA分页

来自分类Dev

Spring Data JPA:查询ManyToMany

来自分类Dev

Spring Data JPA + JpaSpecificationExecutor + NamedEntityGraph

来自分类Dev

Spring Data JPA中的saveAndFlush

来自分类Dev

Spring Data JPA子查询

来自分类Dev

Spring Data Jpa超时异常

来自分类Dev

Spring Data JPA +休眠+ PostgreSQL

来自分类Dev

Spring Data JPA 垃圾收集

Related 相关文章

  1. 1

    Spring Data JPA:类路径资源[]无法解析为URL,因为它不存在

  2. 2

    Spring Boot 1.4:类路径资源[]无法解析为URL,因为它不存在

  3. 3

    找不到Spring类路径资源,因为它不存在

  4. 4

    找不到Spring类路径资源,因为它不存在

  5. 5

    添加了新的bean.xml并获取具有根本原因的类路径资源[Spring-Mail.xml]无法打开,因为它不存在]

  6. 6

    IOException从类路径资源解析XML文档-文件不存在-Spring

  7. 7

    Hibernate:无法打开类路径资源,因为它不存在

  8. 8

    无法打开类路径资源[pointsconfig.properties],因为它不存在

  9. 9

    Spring Data JPA查询不起作用,列不存在

  10. 10

    忽略表Spring Data JPA中的列(如果不存在)

  11. 11

    Spring Data JPA 表连接创建操作符不存在错误

  12. 12

    spring-data-couchbase对不存在的文档抛出DocumentDoesNotExistException

  13. 13

    当条目尚不存在时,Spring Data 插入数据

  14. 14

    如何在Spring MVC中为不存在的资源设置URL映射?

  15. 15

    Spring Data Jpa - 缓存

  16. 16

    Spring Data JPA @OneToMany

  17. 17

    如何解决不存在的类上的Spring Data Neo4j Rest依赖关系

  18. 18

    具有Spring Data JPA的Spring MVC

  19. 19

    无法配置Spring Data JPA:指定的类是接口

  20. 20

    Spring Data JPA和存在查询

  21. 21

    Spring Data Rest基本路径

  22. 22

    Spring-Data-JPA分页

  23. 23

    Spring Data JPA:查询ManyToMany

  24. 24

    Spring Data JPA + JpaSpecificationExecutor + NamedEntityGraph

  25. 25

    Spring Data JPA中的saveAndFlush

  26. 26

    Spring Data JPA子查询

  27. 27

    Spring Data Jpa超时异常

  28. 28

    Spring Data JPA +休眠+ PostgreSQL

  29. 29

    Spring Data JPA 垃圾收集

热门标签

归档