2012-10-12 48 views
2

我有一個遷移到MySQL和PostgreSQL的應用程序,我在數據分配時都有不同的行爲。在Grails中配置Postgres

通過分析在Postgres中創建的數據庫,我意識到在每個表中創建的ID的編號不會被重置爲另一個表的更改。例如,它被設置在寄存器3'Table1'中,並將ID 1計數到3.當插入到另一個表中的另一個類的對象中時,應該爲該表啓動該ID,但是它遵循先前的序列並且當對象被保存在'table2'中時,他的第一個ID開始繼續從4開始計數。我還注意到了Mysql中的一些變化,因爲在'Postgres'中'false'字段'布爾'是preenchdio'0'假「。

我更新了JDBC,但問題仍然存在。我想也許應該有一些在該領域的「映射」配置,但不確定。

我的數據源是這樣的:

environments { 
development { 
    dataSource { 

     dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', '' 

    url = "jdbc:postgresql://localhost:5432/app" 
     driverClassName = "org.postgresql.Driver" 
     dialect = org.hibernate.dialect.PostgreSQLDialect 
     //url = "jdbc:mysql://localhost:3306/app" 
     username = "app" 
     password = "app123" 

    } 
} 
test { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000" 
     username = "sa" 
     password = "" 
    } 
} 
production { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:postgresql://localhost:5432/app" 
     driverClassName = "org.postgresql.Driver" 
     username = "postgres" 


     pooled = true 
     properties { 
      maxActive = -1 
      minEvictableIdleTimeMillis=1800000 
      timeBetweenEvictionRunsMillis=1800000 
      numTestsPerEvictionRun=3 
      testOnBorrow=true 
      testWhileIdle=true 
      testOnReturn=true 
      validationQuery="SELECT 1" 
     } 
    } 
} 

}

您可以按照在MySQL的Postgres同樣的模式?

回答

1

Hibernate爲Postgres和Oracle中的所有表創建單個序列,但是很容易爲每個表創建一個序列。請參閱此解決方案:http://grails.1312388.n4.nabble.com/One-hibernate-sequence-is-used-for-all-Postgres-tables-td1351722.html#a1351725

要使用自定義方言,請在src/groovy或src/java中創建類。使用任何你想要的包和類名。要在Grails中註冊它,請在DataSource.groovy中設置dataSource塊中的dialect屬性,例如DataSource.groovy

dataSource { 
    pooled = true 
    dialect = com.foo.bar.MyDialect 
    driverClassName = ... 
    username = ... 
    password = ... 
} 
+0

Hello Burt!感謝您的迴應! 我看到了所有的文字,並且已經創建了一個自定義方言來解決這個問題。我看到你創建的代碼,但想知道如何在自定義Grail中實現這種方言?我看到了你的代碼,但不知道該怎麼做,請指導我該怎麼做才能實現這個自定義方言並解決這個問題。 – isilva

+0

我編輯了答案以顯示如何註冊方言 –

+0

Hello Burt!謝謝你幫助我!你的代碼完美工作,他的小技巧如何引用它真的很酷。現在我想想一些使安培存儲布爾值爲'0'而不是'假'的方法(如果你有任何提示,請告訴我)。 頂多我只能感謝他。非常感謝! – isilva