2010-12-09 2 views
4

Grails 애플리케이션을 AS400/DB2 데이터베이스와 함께 사용하려고 할 때 문제가 발생했습니다. 대부분의 파일은 id로 사용할 고유 필드가 없기 때문에 매핑 할 수 없습니다. 그리고 그들은 그들이 텍스트 기반 필드이고 긴 형식으로 변환 될 수있는 형식이 아닙니다. (필자는 왜 PK가 긴 데이터 타입을 가져야하는지 알지 못합니다. 만약 당신이 우리에게 시퀀스 나 AI를 원한다면 그것은 의미가 있습니다 만, 당신이 유일한 키를 필요로한다면? 여기에 뭔가 빠졌습니까?)Grails로 도메인 클래스가없는 DB에 액세스

설정 한 데이터 소스를 유지하고 도메인 객체를 사용하지 않고도 DB에 대한 직접적인 SQL 액세스에 사용할 수 있는지 궁금합니다.

도메인 객체를 일시적으로 설정하는 것이 내가 본 것입니다. 그러나 id 필드 없이는 그렇게 할 수 있는지 모르겠습니다. 그게 어떻게 작동하는지 알아?

아이디어가 있으십니까?

덕분에, 기본 키가 오래 더 요구 사항은 없습니다 존

답변

3

당신은 우리가 성능상의 이유로 어떤 경우에 같은 일을하는, 아주 쉽게 데이터베이스에 액세스 할 수 있습니다

class SomeService { 
    def dataSource; 

    def nativeAccessMethod = { 
     def sql = new Sql(dataSource); 
     def rows = sql.rows("select * from myTable"); 
     /* processing continues ...*/ 
    } 
} 

Groovy의 native SQL support도 좋다.

+0

이것은 대부분 효과가있었습니다. dataSource는 null로 돌아가므로 def dataSource = AH.application.mainContext.dataSource를 사용하여 dataSource 객체를 가져와야했습니다. – jonsinfinity

+0

그리고 Sql 클래스의 가져 오기는 무엇입니까? – user2427

+0

가져 오기는 groovy.sql.Sql입니다. –

3

, 그것은 최대 절전 모드와 Grails는 단지 표준입니다. 나는 이후 '거짓 버전'을 추가

create table person (
    username varchar(255) not null, 
    first_name varchar(255) not null, 
    last_name varchar(255) not null, 
    primary key (username) 
); 

이이 DDL에 의해 정의 된 테이블 작동

class Person { 

    String username 
    String firstName 
    String lastName 

    static mapping = { 
     id name: 'username', generator: 'assigned' 
     version false 
    } 
} 

:이 같은 도메인 클래스와 기본 키 고유의 포함 된 VARCHAR 열을 처리 할 수 ​​있습니다 그것은 레거시 시스템이고 아마도 '버전'낙관적 잠금 열이 없습니다.