2016-12-15 6 views
2

私は、多数のテーブルと各テーブルの多数のフィールドを持つ大規模なサードパーティデータベースを使用するgrailsプロジェクトで作業しています。私たちは、これらのフィールドを必要に応じて手動でドメインクラスに追加するというアプローチを取ってきました。grailsドメインクラスにdbフィールドデータを追加せずにジェネリックタイプを取得する方法はありますか?

私はすべてのフィールドへの体系的なアクセスを希望しており、ドメインクラスに追加することなくこれを行う方法があるのだろうかと思います。たとえば、列名が分かっている場合は、データベースのデータ型(つまり、文字列、倍精度、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 
} 
関連する問題