2010-12-09 49 views
4

我試圖將一個Grails應用程序與AS400/DB2數據庫放在一起時遇到了問題。我無法獲得大部分映射的文件,因爲它們沒有唯一的字段用作ID。即使他們確實是基於文本的字段,而不是可以轉換爲長類型的格式。 (我不明白爲什麼PK必須是一個很長的數據類型?如果你想給我們一個序列或人工智能的pk,這將是有道理的,但如果你只是需要一個獨特的密鑰?我在這裏錯過了什麼?)使用Grails訪問沒有域類的數據庫

我想知道是否可以保留我設置的數據源,並直接使用它直接訪問數據庫而不必使用域對象?

我見過的東西是將域對象設置爲瞬態。但是我不知道你是否還可以做一些沒有ID字段的事情。有人知道這是如何工作?

任何想法?

感謝, 喬恩

回答

3

你可以很容易地訪問數據庫,我們正在做在某些情況下,相同的性能方面的原因:

class SomeService { 
    def dataSource; 

    def nativeAccessMethod = { 
     def sql = new Sql(dataSource); 
     def rows = sql.rows("select * from myTable"); 
     /* processing continues ...*/ 
    } 
} 

Groovy的native SQL support也不錯。

+0

這大部分工作。 dataSource返回null,所以我不得不使用def dataSource = AH.application.mainContext.dataSource來獲取dataSource對象。 – jonsinfinity 2010-12-13 18:05:23

3

有沒有要求,即一個主鍵是長的,它只是對Hibernate和Grails的標準。你可以把一個VARCHAR列這與域類這樣的主鍵獨特:

class Person { 

    String username 
    String firstName 
    String lastName 

    static mapping = { 
     id name: 'username', generator: 'assigned' 
     version false 
    } 
} 

這適用於本DDL定義的表:

create table person (
    username varchar(255) not null, 
    first_name varchar(255) not null, 
    last_name varchar(255) not null, 
    primary key (username) 
); 

我加了「版本錯誤」,因爲這是一個遺留系統,你可能沒有'版本'樂觀鎖定列。