标签: grails-domain-class

Grails域类:多列的唯一约束

假设一个简单的Grails域类:

class Account {
    String countryId;

    String userName;

    String password;

    static constraints = {
        ...???...
    }
}
Run Code Online (Sandbox Code Playgroud)

要求用户名对于特定countryId是唯一的,因此在两列上必须存在唯一约束.如何在约束定义中表达这一点?

orm grails unique-constraint grails-validation grails-domain-class

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

Grails获取子域对象

我有两个域类,一个是父类,另一个是子类,我们之间有一个hasMany关系.父类有许多子级,子类属于父类.这是编码示例.

class Parent{
   String name
    static hasMany = [childs:Child] 
    static constraints = {
   }
}


class Child{
   String name
   static belongsTo = [parent:Parent]
   static constraints={}
}
Run Code Online (Sandbox Code Playgroud)

问题是,一旦我获得父对象,也会获取与父类关联的子对象.但是当我将对象转换为JSON时,我没有完全看到子对象,我只能看到子对象的ID.我想查看子对象的所有列而不是Id.

转换的JSON响应:

[{"class":"project.Parent","id":1,
  "name":"name1","childs":[{"class":"Child","id":1},{"class":"Review","id":2}]}]
Run Code Online (Sandbox Code Playgroud)

但是我也想要包含子对象名称的响应,如下所示

[{"class":"project.Parent","id":1,"name":"name1",
  "childs":[{"class":"Child","id":1,"name":"childname1"},
            {"class":"Review","id":2,"name":"childname2"}
           ]
}]
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.提前致谢.

grails json grails-domain-class

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

Grails:按名称查找域类

我想允许用户遍历域类并打印出转储的东西.我的第一个问题:假设以下工作正常:

//this works
class EasyStuffController{
  def quickStuff = {
    def findAThing = MyDomainClass.findByStuff(params.stuff)
    [foundThing:findAThing]
  }
}
Run Code Online (Sandbox Code Playgroud)

写下我想说的内容的正确方法是什么:

//this doesn't
class EasyStuffController{ servletContext ->
  def quickStuff = {
    def classNameString = "MyDomainClass" //or params.whichOne something like that
    def domainHandle = grailsApplication.domainClasses.findByFullName(classNameString)
    //no such property findByFullName
    def findAThing = domainHandle.findByStuff(params.stuff)
    [foundThing:findAThing]
  }
}



//this also doesn't
class EasyStuffController{ servletContext ->
  def quickStuff = {
    def classNameString = "MyDomainClass" //or params.whichOne something like that
    def domainHandle 
    grailsApplication.domainClasses.each{
      if(it.fullName==classNameString)domainHandle=it
    }
    def findAThing = domainHandle.findByStuff(params.stuff) …
Run Code Online (Sandbox Code Playgroud)

grails servlets grails-domain-class

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

Grails默认排序为"hasMany"域属性

我正在尝试hasMany使用mapping语句设置我的属性的默认排序.我正在关注grails doc,但它对我不起作用(grails 1.3.5).我的代码看起来像:

class Note {
    Calendar    sendDate
    static belongsTo = Message
}

class Message {
    static  hasMany = [notes: Note]
    static mapping = {
        notes sort:'sendDate desc'
    }
}
Run Code Online (Sandbox Code Playgroud)

错误消息如下所示:

...
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'notes0_.sendDate' in 'order clause'
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
        at com.mysql.jdbc.Util.getInstance(Util.java:384)
...
Run Code Online (Sandbox Code Playgroud)

你看到我的代码中有任何错误吗?

grails grails-orm grails-domain-class

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

类[]的方法在Grails应用程序之外使用.如果在测试的上下文中使用模拟API或正确引导Grails运行

问题

我知道已经有一个问题,但我认为导致的问题可能因他们所说的而有所不同.我有以下设置:

  1. grails版本: 2.3.4
  2. Hibernate插件:运行时":hibernate:3.6.10.6"
  3. 我的Bootstrap是空的
  4. 我的控制器和服务测试被评论

这个grails应用程序有多个数据源(我不确定这个事实是否与它有任何关系)并且它发生在从第二个数据源调用Domain对象之后,该数据源已经使用grails反向工程插件进行了反向设计(已完成)在一个单独的项目上,然后导入到我的项目.

这是导致Controller层和服务层出现问题的GORM调用

def campusAttributes = CampusAttribute.findAllByNameLike("%Next Option%")
Run Code Online (Sandbox Code Playgroud)

我发现了一些其他的抱怨,这似乎是Maven和grails hibernate插件版本的一个问题,但在那种情况下,问题是grails 2.3.1和特定的hibernate插件版本非常特别.

我所做的只是一个grails run-app(没有用maven构建应用程序也没有任何嘲弄)

提前致谢

grails-orm grails-plugin grails-domain-class grails-2.0

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

如何实现"远程"域?

想象一下两个共享域类的Grails应用程序.也许是一个Book域类.

一个应用程序被识别为数据的所有者,必须访问域数据.像亚马逊和亚马逊的网络服务.

我想拥有的应用程序将使用普通的域类并通过Web服务公开数据是微不足道的 - 在grails中没有问题.

但是在其他应用程序中实现域的最佳做法是什么?

  • 使用服务访问远程域而不是实现本地域类?
  • 实现一个本地域类,覆盖get() - 方法以获取远程数据并使用本地数据库作为缓存?
  • 您还有什么其他解决方案?

grails groovy grails-domain-class

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

在Intellij中运行grails 2.1.3测试Idea:Spock测试中的奇怪错误:无法添加Domain类[class xyZ].它不是域名

我正在升级到grails 2.1.x,并且需要重做一些旧式测试.

我刚刚为我的spock Spec添加了一个新测试,对于这个测试,我需要模拟一个额外的Domain类.

在此之前,我有:

@Mock([Event, EventType])
Run Code Online (Sandbox Code Playgroud)

我现在有:

@Mock([Event, EventType, Notification])
Run Code Online (Sandbox Code Playgroud)

Notification.groovy与Event和EventType(在grails-app/domain下)位于相同的包和物理目录中,因此它绝对是一个grails域类.

当我尝试运行测试时,我得到以下堆栈跟踪:

org.codehaus.groovy.grails.exceptions.GrailsConfigurationException: Cannot add Domain class [class x.y.Notification]. It is not a Domain!
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:911)
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:615)
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:131)
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:128)
Run Code Online (Sandbox Code Playgroud)

当我通过兔子洞并开始调试执行时,我到达DomainClassArtefactHandler的这一部分(第87行):

            // make sure the identify and version field exist
            testClass.getDeclaredField(GrailsDomainClassProperty.IDENTITY);
            testClass.getDeclaredField(GrailsDomainClassProperty.VERSION);
Run Code Online (Sandbox Code Playgroud)

这会引发异常,因为我猜id字段不存在

因此出现了问题,在执行此操作之前不会添加GORM字段.

有没有人建议我需要做什么?我是否需要将我的域类标记为@Entity(这实际上使我的测试通过)?

我很确定我的单元测试不能强制通过.

有什么建议?

更新: 实际上,我刚刚发现只有当我在IDE中运行单元测试时才会出现这个问题:intellij Idea 12.1

创建的问题,测试应用程序在这里:

http://jira.grails.org/browse/GRAILS-9989

http://youtrack.jetbrains.com/issue/IDEA-105087

当我删除两个域类中的静态映射块时,测试通过!

grails intellij-idea grails-domain-class spock grails-2.0

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

如何在Grails Domain Class中创建瞬态变量?

如何在非持久性的域类中设置变量.我希望能够写入和读取该变量,但我不希望它成为表的一部分.

在rails中执行此操作的方法是使用设置变量attr_accessor.Grails有可能这样吗?有谁知道如何做到这一点?

谢谢!

grails grails-domain-class

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

Grails 2.0中的dateCreated,lastUpdated字段

我有一个使用Grails 1.3.7的应用程序,我刚刚迁移到Grails 2.0.该应用程序使用自动dateCreatedlastUpdated字段来管理与创建和修改对象相关的时间戳.升级后,我收到以下错误:

| Running Grails application
| Error 2012-01-29 22:36:53,504 [Thread-8] ERROR util.JDBCExceptionReporter  - ERROR: null value in column "date_created" violates not-null constraint
| Error 2012-01-29 22:36:53,510 [Thread-8] ERROR events.PatchedDefaultFlushEventListener  - Could not synchronize database state with session
Run Code Online (Sandbox Code Playgroud)

在我的Domain Classes中注释掉上述字段会使问题消失.

dateCreatedlastUpdated字段Grails的2.0被弃用?如果是这样,这是否意味着我必须编写代码来手动处理此功能或将代码移动到某种类型的插件,如audit-trail插件?

grails grails-orm grails-domain-class grails-2.0

12
推荐指数
2
解决办法
2万
查看次数

更新Grails中父域类中的"lastUpdated"字段

我有一个父域类,它有hasMany另一个域类.父域和子域类都具有lastUpdateddateCreated字段.我的问题是,当我更新子域类时,我需要父域类来反映该更改并更新其lastUpdated字段.

Grails提供的父和子之间是否有任何映射或其他配置可以实现此功能?

更新

我将以下行添加到子域类:

def beforeUpdate = {
    parent.lastUpdated = new Date()
}
Run Code Online (Sandbox Code Playgroud)

我还必须在控制器中确保当我更新一个孩子时,我还必须保存父母以保持新lastUpdated字段.这似乎工作正常,但我仍然想知道是否有映射或类似的东西会这样做.

grails grails-orm grails-domain-class

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