2012-11-21 40 views
1

我在我的域類中遇到問題。每次我嘗試插入出現此錯誤的條目:Grails命名id列錯誤

The column name "Sequence_No" was not found in this ResultSet. 

這裏是我的域類:

class Record { 

String firstName 
String middleName 
String lastName 
String motherMaidenLastName 
String motherMaidenMiddleName 
Date birthDate 
String examTypeCode 
Date examinationDate 

static constraints = { 
    firstName nullable:false, blank:false, maxSize: 50 
    middleName nullable:true, blank:true, maxSize: 50 
    lastName nullable:false, blank:false, maxSize: 50 
    motherMaidenLastName nullable:true, blank:true, maxSize: 50 
    motherMaidenMiddleName nullable:true, blank:true, maxSize: 50 
    birthDate nullable: false 
    examTypeCode nullable: false, maxSize: 4 
    examinationDate nullable: false 
} 

static mapping = { 
    datasource 'oevs' 
    table '`elig`' 
    id column: '`Sequence_No`' 
    firstName column: '`FirstName`' 
    middleName column: '`MiddleName`' 
    lastName column: '`LastName`' 
    motherMaidenLastName column: '`MotherMaidenLastName`' 
    motherMaidenMiddleName column: '`MotherMaidenMiddleName`' 
    birthDate column: '`Date_Birth`' 
    examTypeCode column: '`ExamType`' 
    examinationDate column: '`Date_Exam`' 
    } 
} 

但我想救被插入到數據庫中的條目,它只是拋出錯誤。我正在使用PostgreSQL。我被要求以這種方式命名列名。這就是爲什麼我需要在命名列中放置一個反勾號字符,因爲如果不這樣做,PostgreSQL會自動將其全部轉換爲小寫字母。每次我刪除id列中的反引號字符時,都不會顯示錯誤,但顯然列名稱已轉換爲小寫。

+0

你在你的數據源中使用創建 - 刪除或更新?你檢查過數據庫模式嗎? –

+0

是的,即時通訊使用我的數據源中的創建 - 刪除。我已經檢查了架構。這似乎是錯誤是由id列中的反引號字符引起的,每次我刪除列id上的反向符號,一切都很順利。令我困惑的是其他帶有反標字符的屬性列不會導致任何錯誤,不像id列中那樣。 – antibry

回答

1

的錯誤在於在此聲明:

這就是爲什麼我需要放置一個反勾字符命名我的專欄 因爲PostgreSQL自動它全部轉換爲小寫字母 如果不這樣做。

反引號(``)MySQL的僅使用(在沒有意義的違反SQL標準的 - 你可以使用SET sql_mode = 'ANSI';解決這個問題)。反引號對PostgreSQL或標準SQL沒有特殊意義。在PostgreSQL中使用雙引號(""(真的在任何地方)都可以實現您的目標。更多詳細信息在this related answer

你幾乎是正確的:不是雙引號的標識符在PostgreSQL中轉換爲小寫。有關詳細信息,請閱讀手冊中的章節Identifiers and Key Words

我一般建議不是在PostgreSQL中完全可以使用CamelCase標識符。有很多方法可以跳過這一點。困惑的用戶的絕望問題不斷涌現在這裏。如果可以的話,不要使用CamelCase,也不要使用雙引號。一旦你創建一個非標準的標識符,你必須始終雙引號......

+0

我在我的域類中使用**雙引號(「」)**測試了它,同樣的事情發生了。除了我的__grails__域類中帶有反引號('')**的id列,我所有的已聲明列都是在CamelCase中成功命名。我被要求以這種方式命名這些列,也許我應該建議他們用標準方式來命名錶格列,就像你說的,因爲我還沒有在__grails__中知道如何解決這個問題。 – antibry