有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Spring Boot Hibernate中的java H2 DB不生成DB架构

我想让我的Spring应用程序自动生成DB模式和表。。。 我读过一些问答;A指向此主题,我已将我的DB URL设置为:

H2DataSource.setUrl("jdbc:h2:mem:tmp.db;INIT=CREATE SCHEMA IF NOT EXISTS GPSTRACKER");

我对我的实体做了如下注释:

@Entity
@Table(name="tblGps", schema= "GPSTRACKER")

但是db模式仍然没有创建

这是我的日志输出。Hibernate正在尝试创建表,但找不到架构

我做错了什么?有什么建议吗

日志输出

2015-04-20 22:29:38.211  INFO 7056 --- [ost-startStop-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
2015-04-20 22:29:38.356  INFO 7056 --- [ost-startStop-1] org.hibernate.Version                    : HHH000412: Hibernate Core {4.3.8.Final}
2015-04-20 22:29:38.360  INFO 7056 --- [ost-startStop-1] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2015-04-20 22:29:38.362  INFO 7056 --- [ost-startStop-1] org.hibernate.cfg.Environment            : HHH000021: Bytecode provider name : javassist
2015-04-20 22:29:38.745  INFO 7056 --- [ost-startStop-1] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
2015-04-20 22:29:38.899  INFO 7056 --- [ost-startStop-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2015-04-20 22:29:39.202  INFO 7056 --- [ost-startStop-1] o.h.h.i.ast.ASTQueryTranslatorFactory    : HHH000397: Using ASTQueryTranslatorFactory
2015-04-20 22:29:39.795  INFO 7056 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
2015-04-20 22:29:39.801 ERROR 7056 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: drop table GPSTRACKER.tbl_gps if exists
2015-04-20 22:29:39.801 ERROR 7056 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : Schema "GPSTRACKER" nicht gefunden
Schema "GPSTRACKER" not found; SQL statement:
drop table GPSTRACKER.tbl_gps if exists [90079-185] 

EntityManagerFactory

@Bean
    public EntityManagerFactory entityManagerFactory() {

        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);
        vendorAdapter.setShowSql(true);
        vendorAdapter.setDatabasePlatform(MyAppSettings.getDbPlattform());

        HibernateJpaDialect jpd = new HibernateJpaDialect();
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();

        factory.setJpaDialect(jpd);
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan(MyAppSettings.packagesToScan);
        factory.setDataSource(MyDataSource());

        return factory.getObject();
    }

数据源

DriverManagerDataSource H2DataSource = new DriverManagerDataSource();
                H2DataSource.setDriverClassName("org.h2.Driver");
                H2DataSource.setUrl("jdbc:h2:mem:tmp.db;INIT=CREATE SCHEMA IF NOT EXISTS GPSTRACKER");

                H2DataSource.setUsername("sa");
                H2DataSource.setPassword("");

@pvgoddijn我记不清了,现在也找不到代码。但我想我需要返回LocalEntityManagerFactory,而不是EntityManagerFactory。。。或类似的东西。祝你好运也许我能在接下来的几天找到代码


共 (1) 个答案

  1. # 1 楼答案

    创建数据源时,需要设置hbm2ddl。属性,以便在启动时创建/更新数据库

        Properties properties = new Properties();
        properties.put("hibernate.hbm2ddl.auto", "update");
        H2DataSource.setConnectionProperties(properties);
    

    您还可以在hibernate中设置属性。cfg。xml文件

    其他可能的值包括:验证|更新|创建|创建删除

    有关此属性和其他属性的其他信息,请访问:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-optional