这不是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
答案 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
项目的一个例子:
然后我使用classpath*:META-INF/persistence.xml
引用它。因此,您需要做的是确保您的persitence.xml
文件位于类路径中。
如果它是maven项目,只需将它放在项目resources
目录下的某个位置,它将自动包含在类路径中。对于例如resources/config/persistence.xml
然后引用classpath:config/persistence.xml
。否则,请确保在构建项目时persistence.xml
文件最终位于classes
目录中。