我正在寻找扩展Grails CRUD生成功能的最佳方法.它应该是一个Grails插件,它为以下功能提供了额外的生成器:
Grails开箱即用的脚本应该尽可能小.到目前为止,我确定了3个实施设计策略:
任何解决方案都有利有弊.实施它的最佳方法是什么?也许有一种更简单的方法.
我在域中使用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.
只要没有超过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) 我正在创建一个Grails插件作为复杂产品的包装器.该产品与hibernate等其他产品有很多依赖关系.问题是,grails具有一些相同的依赖关系,但具有不同的版本.例如Grails - > hibernate 3.6.7其他产品 - > hibernate 3.5.6
Grails如何处理插件依赖项?Grails会为每个插件创建一个单独的ClassLoader吗?它是可配置的吗?
提前致谢!