2012-11-21 5 views
1

내 도메인 클래스에 문제가 있습니다. 여기 Grails naming id column 오류

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 열에서 backtick 문자를 제거 할 때마다 오류가 나타나지 않지만 분명히 열 이름이 소문자로 변환되었습니다.

+0

데이터 소스에서 create-drop 또는 update를 사용하고 있습니까? 데이터베이스 스키마를 확인 했습니까? –

+0

예, 이미 내 데이터 소스에 create-drop을 사용하고 있습니다. 이미 스키마를 확인했습니다. 오류가 id 열의 역 따옴표 문자로 인해 발생하는 것처럼 보였습니다. 열 ID에서 역 추적을 제거 할 때마다 모두 잘됩니다. back tick 문자가있는 다른 속성 열은 id 열과 달리 오류를 일으키지 않습니다. – antibry

답변

1

오류는이 성명에서있다 : 나는 그렇게하지 않을 경우 PostgreSQL을 자동으로 소문자 로 모두 변환하기 때문에 내 열 명명에 다시 틱 캐릭터를 배치해야하는 이유

있다고.

역 따옴표는 (``)는 (SQL 표준의 무의미 위반 - 당신은이 문제를 해결하기 위해 SET sql_mode = 'ANSI';을 사용할 수 있습니다) MySQL의에만 사용됩니다. Backticks는 PostgreSQL이나 표준 SQL에서 특별한 의미가 없습니다. PostgreSQL에서 큰 따옴표 ("")를 사용하십시오 (실제로는 어디에서든지). this related answer에서 자세한 내용.

당신은 거의 옳았습니다 : 이 아닌 식별자는 PostgreSQL에서 소문자로 변환되었습니다. 자세한 내용은 설명서의 Identifiers and Key Words 장을 읽으십시오.

일반적으로 PostgreSQL에서 CamelCase 식별자를 사용하는 것이 좋습니다 아니요입니다. 이를 해결하는 데는 여러 가지 방법이 있습니다. 혼란스러운 사용자에 대한 필사적 인 질문은 여기서 계속 나타납니다. 가능한 경우 CamelCase를 사용하지 말고 큰 따옴표를 사용하지 마십시오. 일단 비표준 식별자를 만들면 항상 그 값을 큰 따옴표로 묶어야합니다 ...

+0

내 도메인 클래스에서 ** 큰 따옴표 ("") **를 사용하여 테스트했습니다. 동일한 결과가 발생합니다. ** backticks (") **가있는 __grails__ 도메인 클래스의 id 열을 제외한 모든 선언 된 열은 CamelCase에서 성공적으로 명명되었습니다. 그런 식으로 열의 이름을 지정해야했는데, __grails__에서이 문제를 해결하는 방법을 아직 모르고 있기 때문에 표준 열로 테이블 열의 이름을 지정하는 것이 좋습니다. – antibry