Spring mvc 如何在部署时有条件地创建Derby数据库?

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:架构“

在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:架构“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