1

ドメイン クラスに問題があります。エントリを挿入しようとするたびに、次のエラーが表示されます。

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 列のバッククォート文字を削除するたびに、エラーは表示されませんが、明らかに列名が小文字に変換されました。

4

1 に答える 1

1

エラーは次のステートメントにあります。

そのため、列に名前を付ける際にバックティック文字を配置する必要があります。これを行わないと、PostgreSQL がすべてを自動的に小文字に変換するためです。

バッククォート (``)はMySQLでのみ使用されます(SQL 標準の無意味な違反で -SET sql_mode = 'ANSI';これを修正するために使用できます)。バッククォートは、PostgreSQL や標準 SQL では特別な意味を持ちません。PostgreSQL で二重引用符 ("" ) を使用して (実際にはどこにでもあります)、目的を達成します。この関連する回答の詳細。

PostgreSQL では、二重引用符で囲まれていない識別子は小文字にキャストされます。詳細については、マニュアルの「識別子とキーワード」の章を参照してください。

通常、PostgreSQL ではキャメルケース識別子をまったく使用しないことをお勧めします。それをつまずく方法はたくさんあります。混乱したユーザーの絶望的な質問がここに現れ続けます. キャメルケースを使用せず、可能であれば識別子を二重引用符で囲まないでください。非標準の識別子を作成したら、常にそれを二重引用符で囲む必要があります...

于 2012-11-25T23:29:40.373 に答える