2014-09-22 1408 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」中使用。