Spring mvc 如何在部署时有条件地创建Derby数据库?
在Java配置的SpringMVC(4.0.1)项目中,我想使用Hibernate(4.3.x)。我使用NetBEans 8.2、JavaSE8和JavaEE7。当我尝试在Glassfish 5.0服务器上部署项目时,错误消息显示:Spring mvc 如何在部署时有条件地创建Derby数据库?,spring-mvc,derby,Spring Mvc,Derby,在Java配置的SpringMVC(4.0.1)项目中,我想使用Hibernate(4.3.x)。我使用NetBEans 8.2、JavaSE8和JavaEE7。当我尝试在Glassfish 5.0服务器上部署项目时,错误消息显示: 准备应用程序时出现异常:无法执行JPA架构生成create命令[create table YYYY(默认情况下生成的id integer为identity,…,主键(id))] java.sql.SQLTransactionRollbackException:架构“
准备应用程序时出现异常:无法执行JPA架构生成create命令[create table YYYY(默认情况下生成的id integer为identity,…,主键(id))]
java.sql.SQLTransactionRollbackException:架构“APP”中已存在表/视图“YYY”
我理解它的原因。以前的部署创建了数据库。但是如何配置Spring EntityManagerActivityBean/DataSourceBean来创建DB,以防它不存在
当前持久性配置代码:
@Configuration
@EnableTransactionManagement
public class PersistenceConfig
{
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean()
{
Map<String, Object> properties = new Hashtable<>();
properties.put("javax.persistence.schema-generation.database.action", "create");
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
adapter.setDatabasePlatform("org.hibernate.dialect.DerbyDialect");
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(adapter);
factory.setDataSource(this.springJpaDataSource());
factory.setPackagesToScan("XxxPU");
factory.setJpaPropertyMap(properties);
return factory;
}
@Bean
public DataSource springJpaDataSource()
{
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUrl("jdbc:derby://localhost/xxx");
dataSource.setUsername("app");
dataSource.setPassword("app");
return dataSource;
}
@Bean
public PlatformTransactionManager jpaTransactionManager()
{
return new JpaTransactionManager(
entityManagerFactoryBean().getObject());
}
}
@配置
@启用事务管理
公共类PersistenceConfig
{
@豆子
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean()
{
映射属性=新哈希表();
properties.put(“javax.persistence.schema generation.database.action”、“create”);
HibernateJavaEndorapter适配器=新的HibernateJavaEndorapter();
setDatabasePlatform(“org.hibernate.dialent.derbydialent”);
LocalContainerEntityManagerFactoryBean工厂=新的LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(适配器);
setDataSource(this.springJpaDataSource());
工厂设置封装扫描(“XxxPU”);
factory.SetJPapPropertyMap(属性);
返回工厂;
}
@豆子
公共数据源springJpaDataSource()
{
DriverManager数据源dataSource=新的DriverManager数据源();
setUrl(“jdbc:derby://localhost/xxx");
dataSource.setUsername(“应用程序”);
dataSource.setPassword(“应用程序”);
返回数据源;
}
@豆子
公共平台事务管理器jpaTransactionManager()
{
返回新的JpaTransactionManager(
entityManagerFactoryBean().getObject());
}
}
为了避免任何副作用,我重命名了persistence.xml
因为我没有得到任何有用的答案,我不得不从以下位置更改db属性:
properties.put(“javax.persistence.schema generation.database.action”、“create”)代码>
到
properties.put(“javax.persistence.schema generation.database.action”,“none”)代码>
在第一次部署之后,进一步的部署可能会成功。将解释数据库初始化
我认为您需要具体说明:
spring.jpa.hibernate.ddl auto=update