无法打开WEB-INF / config / persistence.xml,因为它不存在

时间:2016-06-06 15:15:40

标签: spring hibernate jpa

这不是Same question but not for a webapp

的副本

我的persistence.xml文件位于wepapp/WEB-INF/config/persistence.xml

我使用注释将其引入,我这样做是因为我同时使用了hibernate和JPA 2。我正在清理hibernateTemplate,但现在需要他们一起工作。

@Configuration
@EnableJpaRepositories("request.repositoryJPA")
@ComponentScan("request.domain, classes.applicant")
@PropertySource("classpath:WEB-INF/config/persistence.xml")
@EnableTransactionManagement
public class JpaConfiguration {

完整堆栈跟踪:

Caused By: java.io.FileNotFoundException: class path resource [WEB-INF/config/persistence.xml] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
    at org.springframework.core.io.support.EncodedResource.getInputStream(EncodedResource.java:153)
    at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:90)
    at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:72)
    at org.springframework.core.io.support.PropertiesLoaderUtils.loadProperties(PropertiesLoaderUtils.java:58)
    Truncated. see log file for complete stacktrace

2 个答案:

答案 0 :(得分:1)

如果我使用Spring启动,我个人不会使用persistence.xml,但是如果我是这样的话,我会加载它:

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html(参见73.8使用传统的persistence.xml)。

为什么使用PropertySource尝试加载它?

以下是如何以编程方式创建一个,不涉及persistence.xml(您必须使其适应休眠):

 public LocalContainerEntityManagerFactoryBean MyPersistenceUnit() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(aDataSourceYouveCreatedElsewhere);
        em.setPackagesToScan("some package name");
        em.setLoadTimeWeaver(loadTimeWeaver);
        em.setMappingResources("META-INF/orm.xml");

        EclipseLinkJpaVendorAdapter vendorAdapter = new EclipseLinkJpaVendorAdapter();
        EclipseLinkJpaDialect dialect = vendorAdapter.getJpaDialect();
        dialect.setLazyDatabaseTransaction(true);

        vendorAdapter.setDatabasePlatform(environment.getProperty("some soft coded property"));
        vendorAdapter.setGenerateDdl(false);
        vendorAdapter.setShowSql(Boolean.parseBoolean(environment.getProperty("some handy property to turn on and off showing sql")));

        em.setPersistenceUnitName("whatveryouwanttocallit");
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(additionalProperties());
        return em;

    }

答案 1 :(得分:1)

wepapp/WEB-INF/不在类路径中。在Web应用程序中,类路径是classes文件夹中的WEB-INF目录,该文件位于.war文件中。

这是我放置persitence.xml项目的一个例子:

enter image description here

然后我使用classpath*:META-INF/persistence.xml引用它。因此,您需要做的是确保您的persitence.xml文件位于类路径中。

如果它是maven项目,只需将它放在项目resources目录下的某个位置,它将自动包含在类路径中。对于例如resources/config/persistence.xml然后引用classpath:config/persistence.xml。否则,请确保在构建项目时persistence.xml文件最终位于classes目录中。