2013-03-20 57 views
0

我正在嘗試執行反向工程併爲數據庫中的給定表模式創建模型類。Grails靜態映射失敗(重複ID)

表的名字是infopac_usersProva,它有兩列:

  • strCip VARCHAR(15),這是
  • USERNM VARCHAR(75)

我寫的模型,如ID這個:

class Infopac_usersProva { 

     String strCip 
     String usernm 

     static mapping={ 
     datasource 'gpaq' 
     table 'infopac_usersProva' 
     version false 
     columns{ 
      id column: 'strCip' 
      usernm column: 'USERNM', sqlType: "varchar(75)" 
      strCip column: 'strCip', sqlType: "varchar(15)" 
     } 
     } 

     static constraints = { 
     strCip (nullable:true, insert:false, update:false) 
     } 
    } 

但是我得到這個錯誤:

Repeated column in mapping for entity: edu.upc.gpaq.domain.generic.Infopac_usersProva column: strCip (should be mapped with insert="false" update="false")

我需要指定strCip的列名,因爲如果我取出該行模型試圖獲取str_cip而不是strCip。如果我拿出「id列:‘strCip’然後我得到一個錯誤,指出沒有ID列

我在做什麼錯

回答

1

我認爲你可以擺脫strCip的定義。?。
而是恰當地規定id字段

見,如果這個工程給你:。

class Infopac_usersProva { 

String usernm 

static mapping={ 
    datasource 'gpaq' 
    table 'infopac_usersProva' 
    version false 
    columns{ 
     id generator: 'assigned', name: 'strCip', type: 'string' 
     usernm column: 'USERNM', sqlType: "varchar(75)" 
    } 
} 

我沒有檢查這...

+0

+1您可能還需要顯式聲明'String id'屬性。 – 2013-03-20 09:13:50

+0

非常感謝。我結束了這樣做: – Mitteg 2013-03-20 10:47:05

+0

不客氣。如果你打算在你的評論中包含最終解決方案 - 它被切斷了。請編輯您的帖子並放在那裏。 – 2013-03-20 12:36:57

0

這一個應該工作:

class Infopack_usersProva { 
    String strCip 
    String usernm 

    static constraints = { 
     strCip(nullable: false, maxSize: 15) 
     usernm(nullable: true, maxSize: 75) 
    } 

    static mapping = { 
     datasource('gpaq') 
     table('infopac_usersProva') 
     version(false) 
     autoTimestamp(false) 
     usernm(column: 'USERNM') 
     strCip(column: 'strCip') 
     id(column: 'strCip', name: 'strCip', generator: 'assigned') 
    } 
} 

但它有strCip爲NOT NULL。但AFAIK你需要一個不是null的id列,所以我沒有看到任何解決方法。至少用grails/hibernate。

如果你想strCip永遠不會被包含在任何save()你需要指定

strCip(column: 'strCip', insertable: false, updateable: false) 
在映射塊

。我不知道有任何約束,稱爲insertupdate,並會期望他們在那裏被忽略。

0

最後我做了以下(見粗體字)

class Infopac_usersProva { 

    String usernm 
    String id 

    static mapping={ 
    datasource 'gpaq' 
    table 'infopac_usersProva' 
    version false 
    autoTimestamp false 
    columns{ 
     **id column: 'strCip', sqlType: "varchar(15)"** 
     usernm column: 'USERNM', sqlType: "varchar(75)" 
    } 
    } 

    static constraints = { 

    } 
} 

它現在。萬分感謝!

0

可能會有點晚,但您需要使用可更新和可插入的屬性。它對我有用:

class Infopac_usersProva { 

    String strCip 
    String usernm 

    static mapping={ 
    datasource 'gpaq' 
    table 'infopac_usersProva' 
    version false 
    columns{ 
     id column: 'strCip' 
     usernm column: 'USERNM', sqlType: "varchar(75)" 
     strCip column: 'strCip', updateable: false, insertable: false 
    } 
    } 
}