我試圖利用彈簧數據jpa.Below提供的審計是我webappconfigSPRING-DATA-JPA簡單的審計工作不
@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan("com.astrika.kernel")
@PropertySource("classpath:application.properties")
@EnableJpaRepositories(basePackages="com.astrika.kernel.repository")
@EnableJpaAuditing
public class WebAppConfig {
private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";
private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";
private static final String PROPERTY_NAME_HIBERNATE_POST_INSERT = "hibernate.ejb.event.post-insert";
private static final String PROPERTY_NAME_HIBERNATE_POST_UPDATE = "hibernate.ejb.event.post-update";
private static final String PROPERTY_NAME_HIBERNATE_POST_DELETE = "hibernate.ejb.event.post-delete";
private static final String PROPERTY_NAME_HIBERNATE_PRE_COLLC_UPDATE = "hibernate.ejb.event.pre-collection-update";
private static final String PROPERTY_NAME_HIBERNATE_PRE_COLLC_REMOVE = "hibernate.ejb.event.pre-collection-remove";
private static final String PROPERTY_NAME_HIBERNATE_PRE_COLLC_RECREATE = "hibernate.ejb.event.post-collection-recreate";
@Resource
private Environment env;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource());
entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);
entityManagerFactoryBean.setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
entityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter());
entityManagerFactoryBean.setMappingResources("WEB-INF/classes/orm.xml");
// entityManagerFactoryBean.setJpaProperties(hibProperties());
return entityManagerFactoryBean;
}
// private Properties hibProperties() {
// Properties properties = new Properties();
// properties.put(PROPERTY_NAME_HIBERNATE_POST_INSERT,
// env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_POST_INSERT));
// properties.put(PROPERTY_NAME_HIBERNATE_POST_UPDATE,
// env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_POST_UPDATE));
// properties.put(PROPERTY_NAME_HIBERNATE_POST_DELETE,
// env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_POST_DELETE));
// properties.put(PROPERTY_NAME_HIBERNATE_PRE_COLLC_UPDATE,
// env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_PRE_COLLC_UPDATE));
// properties.put(PROPERTY_NAME_HIBERNATE_PRE_COLLC_REMOVE,
// env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_PRE_COLLC_REMOVE));
// properties.put(PROPERTY_NAME_HIBERNATE_PRE_COLLC_RECREATE,
// env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_PRE_COLLC_RECREATE));
// return properties;
// }
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new
HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setShowSql(false);
hibernateJpaVendorAdapter.setGenerateDdl(true);
hibernateJpaVendorAdapter.setDatabase(Database.MYSQL);
return hibernateJpaVendorAdapter;
}
@Bean
public JpaTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
return transactionManager;
}
@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/pages/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
@Bean
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasename(env.getRequiredProperty("message.source.basename"));
source.setUseCodeAsDefaultMessage(true);
return source;
}
和我orm.xml中看起來像這樣
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
version="2.0">
<persistence-unit-metadata>
<persistence-unit-defaults>
<entity-listeners>
<entity-listener class="org.springframework.data.jpa.domain.support.AuditingEntityListener" />
</entity-listeners>
</persistence-unit-defaults>
</persistence-unit-metadata>
當過我在Tomcat服務器上運行我的應用程序得到錯誤
INFO: HHH000360: Unable to resolve mapping file [WEB-INF/classes/orm.xml]
像createdOn,lastModifiedOn這樣的審計字段永遠不會得到一個值。它們總是爲空。 請幫忙,爲什麼我得到上面的tomcat錯誤?它是否對審計字段的空值負責?我是否缺少更多配置?
我忘了提我使用基於註解審覈即@CreatedOn和 @LastModifiedOn
您的orm.xml文件在META-INF/orm.xml中嗎? – gipinani
沒有它的資源在部署後轉到web-inf/classes/ – Deb
嘗試將您的orm.xml放在src/main/resources下在META-INF目錄中,並從你的WebAppConfig中刪除setMappingResources。它是否工作? – gipinani