【问题标题】:How to let system work even after GORM table schema changes?即使在 GORM 表架构更改后如何让系统正常工作?
【发布时间】:2013-11-11 10:46:53
【问题描述】:

我将 GORM 用于数据库中的系统元数据。但是,预计不会直接使用它,而是通过缓存使用它。该系统的固有工作完全依赖于元数据。因此,这里的预期是,即使作为最终来源的 GORM 表中发生架构更改,缓存系统中的数据也应该可以正常工作。只有当预期的数据不存在时,它才应该查询数据库表最终导致问题。我知道这可能不是生产级系统所期望的,但我的项目目前处于开发阶段,涉及多个人员,其中更改同时发生而其他人不知道,我们不希望整个应用程序因为 GORM 中的字段名称而停机表已更改。

在 GORM 中可以做些什么来实现这一点?另外,我们如何将任何此类 GORM 问题捕获到一个地方并将其报告给管理员或开发人员以便编辑 GORM 类的映射?

【问题讨论】:

    标签: mysql sql hibernate grails grails-orm


    【解决方案1】:

    哇!好主意! 对于这样的想法,grails catch 插件就派上用场了!你可以捕获域对象

    http://grails.org/plugin/cache

    http://grails-plugins.github.io/grails-cache/docs/manual/guide/usage.html

    此外,您还可以使用 ecahe.plugins 来支持大数据 (www.bigdata.com)

    hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = true
    cache.provider_class = 'org.hibernate.cache.EhCacheProvider'
    }
    

    让您的域能够被捕获:

    class Book {
     …
    static mapping = { cache true }
    }
    class Country {
     …
    static mapping = { cache usage: 'read-only' }
    }
    class Author {
     …
    static hasMany = [books:Book]
    static mapping = { books cache: true }
    }
    

    如果不想破坏应用程序,通过来自数据库域更改的新更改覆盖捕获,您可以像这样查询它:

    def criteria = DomainClass.createCriteria()
    def results = criteria.list {
    cacheable(true)
    }
    

    还有更多......来自 Birtbeckwith 博客的引用......

    【讨论】:

      猜你喜欢
      • 2015-06-14
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多