标签: grails-orm

根据grails中的父属性对查询结果进行排序

是否可以根据关系中父类的属性对查询结果进行排序。例如,我有一个用户域类,它与任务列表具有一对多关系。

当显示“任务”域类的列表页面时,我希望能够通过关联的“用户名”对任务列表进行排序。

class User {
    String name
    String login
    String group
    List tasks = new ArrayList()
    static hasMany = [tasks:Task]
}

class Task {
    String summary
    String details
    User user
    static belongsTo = [user:User]
}
Run Code Online (Sandbox Code Playgroud)

我可以做这样的事情

Task.list([sort:"user", order:"asc"])
Run Code Online (Sandbox Code Playgroud)

但这是根据user.id进行排序的,是否有一种方法可以指定要在user.name上进行的排序?

grails groovy grails-orm

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

在Grails 1.3.6中,nullable:true和nullable:false之间没有区别吗?

以下域模型定义..

class Test {
  String a
  String b

  static mapping = {
    version(false)
    table("test_table")
    a(nullable: false)
    b(nullable: true)
  }
}
Run Code Online (Sandbox Code Playgroud)

..产生以下MySQL模式..

CREATE TABLE test_table (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  a varchar(255) NOT NULL,
  b varchar(255) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

请注意ab获得相同的MySQL列定义,尽管事实a被定义为非可空,并且b在GORM映射中可以为空.

我究竟做错了什么?我正在运行Grails 1.3.6.

grails grails-orm

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

将整个表加载到缓存Grails中

可以在Grails启动时将整个表加载到缓存中吗?

例如,我有一个2个表,每个表有5000条记录,用作静态只读数据.这个数据是最受欢迎的,因为其他表的所有信息都是从这个只读表中派生出来的.

我知道grails有一个缓存使用场景,但是这个信息会在很短的时间后不断从缓存中逐出,并且只会在下一个请求中重新缓存.

基本上是通过不必访问此静态数据的数据库来减少响应时间.

谢谢

grails hibernate grails-orm

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

获得grails的价值

def bid= Book.findAllBy(params.bname)

println(bid.id)
Run Code Online (Sandbox Code Playgroud)

我得到了结果 [58]

如何在没有报价的情况下获得价值?

如何将'bid'转换为整数?

grails groovy grails-orm

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

Grails为什么我的缓存失效了?

我在grails应用程序中缓存了一些域实例和查询.我希望在第一次向db发出查询后,后续调用只会触发缓存.但是,我看到定期查询命中db(每5-6次后).同时没有数据更新/插入数据库.我正在使用p6spy检查所有记录的查询,并且看不到任何更新或插入.

我需要调整其他设置吗?

目前域类有

static mapping = {
cach true
}
Run Code Online (Sandbox Code Playgroud)

查询就好findBy*[cache:true].

grails caching grails-orm

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

在Grails GORM中搜索域对象的子项

如何在Groovy/Gorm中正确编写此代码?

我有一个包含许多内容PageComponent域类.我想看看特定的PageComponent是否包含具有特定内容.

我想我可以说:

def pageComponent = PageComponent.get(1);

if (pageComponent.contents.findByKey("textnode") {
  // update
} else {
  // insert
}
Run Code Online (Sandbox Code Playgroud)

目前,我正在使用它.不是很优雅......

def pageComponent = PageComponent.get(1);

def content = Content.withCriteria {
    eq "pageComponent.id", pageComponent.id
    eq "key", "textnode"
}
Run Code Online (Sandbox Code Playgroud)

grails groovy grails-orm

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

使用grails中的多个数据库引导数据时没有hibernate会话

我很难将域类对象保存到除默认dataSource之外的dbs中.应该说我可以从日志数据库中读取,但无法保存(UserLog.list()工作).当我运行应用程序时,保存UserLog对象会触发下面的错误.

DataSource.groovy的:

development {
    dataSource {
        dbCreate = "create-drop"
        url="jdbc:postgresql://localhost:5432/db1"
        username = "postgres"
        password = "postgres"
        driverClassName = "org.postgresql.Driver"
    }
    dataSource_log {
        dbCreate = "update"
        url="jdbc:postgresql://localhost:5432/db2"
        username = "postgres"
        password = "postgres"
        driverClassName = "org.postgresql.Driver"
    }
}
Run Code Online (Sandbox Code Playgroud)

log.UserLog:

class UserLog{
    ...
    static mapping = {
        id generator: "hilo"
        version false
        datasource 'log'
    }
}
Run Code Online (Sandbox Code Playgroud)

CONF/BootStrap.groovy中:

import groovy.sql.Sql
import happyfloat.Address

import java.text.DateFormat
import java.text.SimpleDateFormat

import log.UserLog

class BootStrap {

    def list = []
    def dataSource_log
    Random rand = new Random()

    def …
Run Code Online (Sandbox Code Playgroud)

grails hibernate grails-orm

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

使用grails控制台创建的新域对象在dbconsole中不可见

我试图在本指南的帮助下在grails控制台中创建一个新的域对象.根据控制台输出,创建新对象:

grails> shell
groovy:000> new foo.Book(title: 'bar').save(failOnError: true, flush: true)
groovy:000> foo.Book : 1
groovy:000> foo.Book.list()
groovy:000> [foo.Book : 1]
Run Code Online (Sandbox Code Playgroud)

但是这个新书实体在dbconsole中是不可见的.当我连接到DataSource.groovy中的dev环境的JDBC url时,会出现表BOOK:

jdbc:h2:mem:devDb;MVCC=TRUE
username: sa
password: <blank>
Run Code Online (Sandbox Code Playgroud)

但是一个select返回0行

相关的DataSource.groovy配置(默认)

dataSource {
    pooled = true
    driverClassName = "org.h2.Driver"
    username = "sa"
    password = ""
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3
//    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
}

// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = …
Run Code Online (Sandbox Code Playgroud)

grails groovy h2 grails-orm

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

什么 - >运算符意味着什么和grails中的用法?

我是grails应用程序的新工作.我对这个 - > grails中的运算符感到困惑.谁能给我一个明确的概念呢?或者给我任何关于这方面的参考资料对我来说很容易.我已经在阅读在线文档和一些书籍,但我仍然对此运算符和用法感到困惑.

java grails groovy grails-orm grails-2.0

1
推荐指数
2
解决办法
1953
查看次数

Grails无法实现Domain类

我正在使用Grails 3.1.4,我创建了一些域对象和编写的单元测试.测试在我的计算机上执行正常.

在我的电脑上测试

但是在其他开发者计算机和连续集成平台上,测试失败,例外:

java.lang.IllegalStateException: Either class [ ] is not a domain class or GORM has not been initialized correctly or has already been shutdown. If you are unit testing your entities using the mocking APIs
at org.grails.datastore.gorm.GormEnhancer.stateException(GormEnhancer.groovy:159)
at org.grails.datastore.gorm.GormEnhancer.findValidationApi(GormEnhancer.groovy:173)
at org.grails.datastore.gorm.GormValidateable$Trait$Helper.currentGormValidationApi(GormValidateable.groovy:120)
at org.grails.datastore.gorm.GormValidateable$Trait$Helper.validate(GormValidateable.groovy:87)
at com.cscinfo.platform.constraint.CascadeValidationConstraint.validateValue(CascadeValidationConstraint.groovy:43)
at com.cscinfo.platform.constraint.CascadeValidationConstraint.processValidateWithVetoing_closure1(CascadeValidationConstraint.groovy:29)
at groovy.lang.Closure.call(Closure.java:426)
at com.cscinfo.platform.constraint.CascadeValidationConstraint.processValidateWithVetoing(CascadeValidationConstraint.groovy:28)
at grails.validation.AbstractVetoingConstraint.validateWithVetoing(AbstractVetoingConstraint.java:33)
at grails.validation.ConstrainedProperty.validate(ConstrainedProperty.java:967)
at org.grails.validation.GrailsDomainClassValidator.validatePropertyWithConstraint(GrailsDomainClassValidator.java:211)
at org.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:81)
at org.grails.datastore.gorm.GormValidationApi.doValidate(GormValidationApi.groovy:89)
at org.grails.datastore.gorm.GormValidationApi.validate(GormValidationApi.groovy:161)
at org.grails.datastore.gorm.GormValidateable$Trait$Helper.validate(GormValidateable.groovy:87)
at api.mails.MailSpec.Test la validation d'un mail incorrect 2(MailSpec.groovy:66)
Run Code Online (Sandbox Code Playgroud)

似乎GORM无法获取我的域对象.

我无法在我的计算机上重现该错误.任何帮助或文档将不胜感激.谢谢 !

grails grails-orm

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

标签 统计

grails ×10

grails-orm ×10

groovy ×5

hibernate ×2

caching ×1

grails-2.0 ×1

h2 ×1

java ×1