2014-09-22 1407 views
3
  • 我想保留所有我的表名为小写。例如personH2数据库:如何为表名使用小写?

  • 我用liquibase设置我的数据库,它看起来像

    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd“> 添加人表

我用H2数据库来运行我的集成测试和pom.xml作为

<cargo.datasource.datasource.earth> 
     cargo.datasource.driver=${h2.driver}| 
     cargo.datasource.url=${datasource.url}| 
     cargo.datasource.jndi=${datasource.jndi}| 
     cargo.datasource.username=${h2.user}| 
     cargo.datasource.password=${h2.user} 
    </cargo.datasource.datasource.earth> 

其中datasource.url看起来像

<datasource.url>jdbc:h2:${project.build.directory}/earth;DATABASE_TO_UPPER=false</datasource.url> 

当我运行mvn成立,我看到

INFO 9/22/14 3:32 PM:liquibase: Successfully acquired change log lock 
INFO 9/22/14 3:32 PM:liquibase: Dropping Database Objects in schema: UNIT-TESTING-PU.PUBLIC 
INFO 9/22/14 3:32 PM:liquibase: Creating database history table with name: PUBLIC.DATABASECHANGELOG 
INFO 9/22/14 3:32 PM:liquibase: Creating database history table with name: PUBLIC.DATABASECHANGELOG 
INFO 9/22/14 3:32 PM:liquibase: Successfully released change log lock 
INFO 9/22/14 3:32 PM:liquibase: Successfully acquired change log lock 
INFO 9/22/14 3:32 PM:liquibase: Reading from PUBLIC.DATABASECHANGELOG 
INFO 9/22/14 3:32 PM:liquibase: Reading from PUBLIC.DATABASECHANGELOG 
INFO 9/22/14 3:32 PM:liquibase: Reading from PUBLIC.DATABASECHANGELOG 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/01.xml::09222014.0639::harit: Reading from PUBLIC.DATABASECHANGELOG 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/01.xml::09222014.0639::harit: Table person created 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/01.xml::09222014.0639::harit: ChangeSet liquibase/2014/01.xml::09222014.0639::harit ran successfully in 1ms 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/01.xml::09222014.0639::harit: Reading from PUBLIC.DATABASECHANGELOG 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/02.xml::09222014.0844::harit: Reading from PUBLIC.DATABASECHANGELOG 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/02.xml::09222014.0844::harit: New row inserted into person 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/02.xml::09222014.0844::harit: New row inserted into person 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/02.xml::09222014.0844::harit: New row inserted into person 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/02.xml::09222014.0844::harit: New row inserted into person 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/02.xml::09222014.0844::harit: New row inserted into person 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/02.xml::09222014.0844::harit: ChangeSet liquibase/2014/02.xml::09222014.0844::harit ran successfully in 3ms 
INFO 9/22/14 3:32 PM:liquibase: liquibase/changelog.xml: liquibase/2014/02.xml::09222014.0844::harit: Reading from PUBLIC.DATABASECHANGELOG 
INFO 9/22/14 3:32 PM:liquibase: Successfully released change log lock 
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.929 sec 
Running com.learner.integration.HelloIT 
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.443 sec 
Running com.learner.integration.PersonsIT 
[INFO] [talledLocalContainer] 15:32:59,145 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-15) SQL Error: 42102, SQLState: 42S02 
[INFO] [talledLocalContainer] 15:32:59,146 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-15) Table "Person" not found; SQL statement: 
[INFO] [talledLocalContainer] select person0_.id as id1_0_, person0_.firstName as firstNam2_0_, person0_.lastName as lastName3_0_ from Person person0_ [42102-181] 
[INFO] [talledLocalContainer] 15:32:59,153 ERROR [org.jboss.as.ejb3.invocation] (default task-15) JBAS014134: EJB Invocation failed on component PersonManager for method public java.util.List com.learner.business.manager.PersonManager.getPersons(): javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement 
[INFO] [talledLocalContainer] at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:190) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final] 
[INFO] [talledLocalContainer] at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final] 
[INFO] [talledLocalContainer] at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:340) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final] 
[INFO] [talledLocalContainer] at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final] 
[INFO] [talledLocalContainer] at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
[INFO] [talledLocalContainer] at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final] 
[INFO] [talledLocalContainer] at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 

正如你所看到的, liquibase创建的person表和我使用DATABASE_TO_UPPER=falseH2这使得从PERSONPerson

问题
我怎么能告诉H2,我的表是全部小写 - >personPerson

+0

[Javadocs for h2](http://www.h2database.com/javadoc/org/h2/constant/DbSettings.html)陈述:“**将此设置为”false“为实验性**”(强调我的)。 – hd1 2014-09-22 22:44:51

+0

我不确定谁创建了桌子? Liquibase?如果是,我想你需要添加标签'liquibase'。 – 2014-09-23 09:22:41

+0

@ThomasMueller,我也有兴趣让我的数据库中的表格小写而不是上部。有没有可能h2有一个功能,可以忽略大小写查询或创建小写字母表(反向的)?编写SQL时,我的IDE将完成所有内容。 – 2016-10-10 00:35:47

回答

3

尝试在H2连接URL设置“database_to_upper = false”中使用。