我的域类中存在问题。每次我尝试插入一个条目时都会出现此错误:
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 :(得分:1)
错误在于此陈述:
这就是为什么我需要在命名我的列时放置一个后退字符 因为PostgreSQL会自动将它全部转换为小写字母 如果不这样做。
反引号(``)仅用于 MySQL (在毫无意义的违反SQL标准的情况下 - 您可以使用SET sql_mode = 'ANSI';
来解决此问题)。反引号对PostgreSQL或标准SQL没有特殊意义。在PostgreSQL 中使用双引号(""
)(确实在任何地方),以实现您的目标。 this related answer中的更多详细信息。
你几乎把它弄好了:不是双引号的标识符在PostgreSQL中转换为小写。有关详细信息,请阅读手册中的Identifiers and Key Words章节。
我通常建议不在PostgreSQL中使用CamelCase标识符。有很多方法可以解决这个问题。困惑用户的绝望问题不断出现在这里。如果可以,请不要使用CamelCase并且不要双重引用标识符。创建非标准标识符后,您必须始终对其进行双重引用...