【问题标题】:Way to get db field data generic type without adding it to my grails domain class?在不将其添加到我的 grails 域类的情况下获取 db 字段数据泛型类型的方法?
【发布时间】:2016-12-15 15:54:51
【问题描述】:

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

我现在想要系统地访问所有字段,我想知道是否有一种方法可以在不将它们添加到我的域类的情况下做到这一点。例如,如果我知道列名,我想知道数据库中的数据类型(即是否是字符串、双精度、整数、布尔值、日期)。

我不需要以编程方式访问这些字段,因为我可以使用第 3 方供应商提供的 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")

【问题讨论】:

    标签: grails grails-orm


    【解决方案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
    }
    

    【讨论】:

      【解决方案2】:

      我认为你可以直接使用 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

      【讨论】:

      • 当然可以,但这在 RDBM 系统之间是不可移植的。
      • 当然,你的答案肯定更好+1
      猜你喜欢
      • 2013-03-05
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      相关资源
      最近更新 更多