2010-04-02 5 views
0

도메인 클래스의 Grails 정적 '매핑'속성이 DRY를 위반합니까?
        문자열 제목
        문자열 ISBN
       에게Grails 정적 '매핑'속성이 데이터베이스 객체의 볼트에 과부하되어 DRY를 위반합니까?

클래스 예약 {
        긴 ID : 의가 정식 도메인 클래스를 살펴 보자 게시 된 날짜 012 3,         저자 저자
        정적 매핑 = {
                        ID 생성기 '힐로'PARAMS : [표 'hi_value'컬럼 : 'next_value', max_lo : 100]
        }
}

나 :

클래스 예약 {...
                정적 매핑 = {
                        ID (발전기 : '순서', PARAMS : [sequence_name "book_seq"])
       }
}

그리고 우리가 말을하자,이 생각을 계속하는 I 내 Grails 응용 프로그램을 HSQLDB 또는 MySQL과 함께 사용하도록 만들지 만 IT 부서에서는 상업용 소프트웨어 패키지 (캘리포니아 주 레드 우드 쇼어 (Redwood Shores)의 대형 회사에서 작성)를 사용해야한다고 말합니다.

이 변경으로 인해 개발 및 테스트 환경에서 웹 응용 프로그램이 고사 되었습니까? MySQL은 기본 키 열에서 자동 증가를 지원하지만 예를 들어 시퀀스 객체를 지원합니다.

도메인 클래스를로드하지 않고 '프로덕션 모드 인 경우에만'이런 종류의 구현 방법이 있습니까?

답변

1

이 질문 : - 'IT 부서 내가 상용 소프트웨어 패키지를 사용해야 말한다'고 몇 가지 이유는 일반적으로 있습니다 잘 our site

에 설명되어 있습니다 (재 시퀀스)보다 Grails를보다 최대 절전 모드와 관련이 있습니다. ... 이들 중 뷰, 테이블, 짝수 열과 같은 데이터베이스 개체의 명명 표준이 있습니다.

또 다른 이유는 개체가 특정 범위에 속하는 것을 보장하기 위해 '모든 테이블에는 자체 시퀀스가 ​​있어야합니다'와 같은 표준이 있습니다. 이렇게하려면 이름 변경을위한 정적 매핑 블록을 추가하면됩니다. COMMENT는 COMMENT_TBL이되고 사용중인 데이터베이스에 대해 Hibernate Dialect를 서브 클래스 화합니다.


N.B : 매핑 폐쇄에 오라클 고유의 ID를 생성 이제 Grails의 1.2.x를 프레임 워크에 의해 무시되고, 그래서이 질문은 최신 버전 관련이 ​​없습니다. 이 질문에 대한 배경은 JIRA 을 참조하십시오 - 원본 안내문 here.

public class TableNameSequenceGenerator extends SequenceGenerator { 

/** 
* If the parameters do not contain a {@link SequenceGenerator#SEQUENCE} name, we 
* assign one based on the table name. 
*/ 
public void configure(Type type, Properties params, Dialect dialect) throws MappingException { 
    if(params.getProperty(SEQUENCE) == null || params.getProperty(SEQUENCE).length() == 0) { 
     String tableName = params.getProperty(PersistentIdentifierGenerator.TABLE); 
     if(tableName != null) { 
      String seqName = “seq_” + tableName; 
      params.setProperty(SEQUENCE, seqName);    
     } 
    } 
    super.configure(type, params, dialect); 
} 

}

public class MyDialect extends Oracle10gDialect { 
    public Class getNativeIdentifierGeneratorClass() { 
     return TableNameSequenceGenerator.class; 
    } 
} 
: 당신은 당신 만 서브 클래스 Oracle10gDialect를 사용할 수있는 하나의 시퀀스 당 테이블 접근 방식을 원하는 경우 최대 절전 모드 community, 특히 롭 Hasselbaum 권장 명심하십시오
관련 문제