小编Wal*_*mar的帖子

在Grails中对要批准的域实例进行版本控制

我正在寻找扩展Grails CRUD生成功能的最佳方法.它应该是一个Grails插件,它为以下功能提供了额外的生成器:

  • 对于历史记录,应保存对扩展域实例的任何更改(作为其版本)
  • 只有一个版本的实例可以处于活动状态
  • 用户应该能够激活不是由他创建的实例版本(当前活动的实例应该被停用)(4眼原则)
  • 差异视图很不错

Grails开箱即用的脚本应该尽可能小.到目前为止,我确定了3个实施设计策略:

  1. 具有相同模式的镜像表,其中包含版本(将域/表的数量加倍).激活的版本将复制到本机域,反之亦然.
  2. 在域类中使用鉴别器.一些新列将添加到域中(如state [active,notActive],lastUpdatedBy,lastUpdatedDate ...)
  3. (De-)使用BLOB将实例序列化到特殊域(例如,domain.properties为JSON)

任何解决方案都有利有弊.实施它的最佳方法是什么?也许有一种更简单的方法.

grails grails-orm

13
推荐指数
1
解决办法
590
查看次数

如何在Grails中更改BigDecimal的精度

我在域中使用BigDecimal作为类型.如果我检查数据库中生成的模式(mySql),则列类型为十进制(19,2).我可以通过使用Domain类中的约束来更改它(如Grails文档中所述),如:

static constraints = {
     salary (scale: 3, maxSize:32)
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何在我的应用程序中为BigDecimal类型的所有字段定义scale和maxSize?

我已经尝试过在config.groovy中定义它

grails.gorm.default.constraints = {
    '*'(scale:10, size:32, class:BigDecimal)
}
Run Code Online (Sandbox Code Playgroud)

或者像那样:

grails.gorm.default.mapping = {
    '*'(scale:10, size:32, class:BigDecimal)
}
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用.

Grails vesion是2.2.2.

grails grails-orm

7
推荐指数
2
解决办法
4575
查看次数

Grails hibernate会话分批

只要没有超过10,000个对象的批处理,GORM就可以正常工作.如果没有优化,您将面临outOfMemory问题.

常见的解决方案是每次n(egn = 500)个对象刷新()和清除()会话:

Session session = sessionFactory.currentSession
Transaction tx = session.beginTransaction();
def propertyInstanceMap = org.codehaus.groovy.grails.plugins.DomainClassGrailsPlugin.PROPERTY_INSTANCE_MAP

Date yesterday = new Date() - 1

Criteria c = session.createCriteria(Foo.class)
c.add(Restrictions.lt('lastUpdated',yesterday))
ScrollableResults rawObjects = c.scroll(ScrollMode.FORWARD_ONLY)

int count=0;
while ( rawObjects.next() ) {
    def rawOject = rawObjects.get(0);

    fooService.doSomething()

    int batchSize = 500
    if ( ++count % batchSize == 0 ) {
        //flush a batch of updates and release memory:
        try{
            session.flush();
        }catch(Exception e){
            log.error(session)
            log.error(" error: " + e.message)
            throw e
        }
        session.clear();
        propertyInstanceMap.get().clear() …
Run Code Online (Sandbox Code Playgroud)

performance grails hibernate grails-orm

5
推荐指数
1
解决办法
4443
查看次数

Grails如何处理插件依赖项

我正在创建一个Grails插件作为复杂产品的包装器.该产品与hibernate等其他产品有很多依赖关系.问题是,grails具有一些相同的依赖关系,但具有不同的版本.例如Grails - > hibernate 3.6.7其他产品 - > hibernate 3.5.6

Grails如何处理插件依赖项?Grails会为每个插件创建一个单独的ClassLoader吗?它是可配置的吗?

提前致谢!

grails classloader

4
推荐指数
1
解决办法
2875
查看次数

标签 统计

grails ×4

grails-orm ×3

classloader ×1

hibernate ×1

performance ×1