获取db字段数据泛型类型而不将其添加到我的grails域类的方法?

时间:2016-12-15 15:54:51

标签: grails gorm

我正在使用grails项目,该项目使用大型第三方数据库,每个表中包含大量表和多个字段。我们采取了根据需要手动将这些字段添加到域类的方法。

我正处于我希望系统访问所有字段的地步,我想知道是否有办法在不将其添加到我的域类的情况下执行此操作。例如,如果我知道列名,我想知道数据库中的数据类型(即,它是字符串,double,int,bool,date)。

我不需要以编程方式访问字段,因为我可以使用第三方供应商提供的REST API与这些表进行交互。我想知道我是否可以确定他们期望的数据类型。

我发现grails有一个反向工程插件,但我不确定这是我想要的,因为我不想创建一个域类,我只想要这样的东西:

// 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")

2 个答案:

答案 0 :(得分:1)

查看逆向工程插件正在使用的hibernate tools。具体来说,它会创建DatabaseCollector

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
}

答案 1 :(得分:-1)

我认为你可以直接使用SQL实例

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

您可以直接从Groovy sql http://docs.groovy-lang.org/latest/html/api/groovy/sql/Sql.html

调用SQL