2016-12-15 6 views
2

많은 테이블과 각 테이블의 수많은 필드가있는 큰 타사 데이터베이스를 사용하는 grails 프로젝트로 작업하고 있습니다. 우리는 필요에 따라 이러한 필드를 도메인 클래스에 수동으로 추가하는 접근 방식을 취했습니다.Grails 도메인 클래스에 추가하지 않고 db 필드 데이터 제네릭 형식을 얻는 방법?

나는 모든 필드에 대한 체계적인 액세스를 원할 때, 내 도메인 클래스에 추가하지 않고이를 수행 할 수있는 방법이 있는지 궁금합니다. 예를 들어, 열 이름을 알고 있다면 데이터베이스의 데이터 유형 (즉 문자열인지, double인지, int인지, bool인지, 날짜인지)을 알고 싶습니다.

타사 공급 업체에서 제공 한 REST API를 사용하여 이러한 테이블과 상호 작용할 수 있기 때문에 프로그래밍 방식으로 필드에 액세스 할 필요가 없습니다. 나는 그들이 원하는 데이터 유형을 결정할 수 있는지 알고 싶다.

// this is what I work for fields I've added to the domain class 
Type works = MyDomainClass.getDeclaredField("declaredFieldName").genericType 
// is there a way to do this without adding it to the domain class? 
Type needed = someAPI(MyDomainClass,"unDeclaredFieldName") 

답변

1

확인 :

나는 Grails는이 리버스 엔지니어링 플러그인을 가지고,하지만 난 도메인 클래스를 생성하지 않기 때문에, 난 그냥 뭔가를 원하는 내가 원하는 무엇 확실하지 않다 발견 리버스 엔지니어링 플러그인이 사용하고있는 hibernate tools을 제거하십시오. 구체적으로는 DatabaseCollector가 생성 : 나는 당신이 예를

SELECT DATA_TYPE FROM all_tab_columns WHERE table_name = 'TABLE NAME' AND column_name = 'COLUMN NAME' 

똑바로 SQL을 사용하여 단지 수 있다고 생각

DatabaseCollector readDatabaseSchema(String catalog, String schema) { 
    catalog = catalog ?: settings.defaultCatalogName 
    schema = schema ?: settings.defaultSchemaName 

    JDBCReader reader = JDBCReaderFactory.newJDBCReader(cfg.properties, settings,revengStrategy, cfg.serviceRegistry) 
    DatabaseCollector dbs = new MappingsDatabaseCollector(mappings, reader.metaDataDialect) 
    reader.readDatabaseSchema dbs, catalog, schema, new ReverseEngineerProgressListener() 
    dbs 
}