标签: grails-orm

Grails中的控制器

我在Grails写了一个小的webapp,我对控制器设计和使用GORM的最佳实践有以下问题:

我将用户对象存储在session.user中.目前,我的所有操作方法都以下面的代码开头,以确保有效用户已登录并且用户对象是新鲜的:

class FooController {
  def actionMethodThatRequiresAValidUser = {
    if (!session?.user) {
      redirect(controller: "authentication", action: "login")
    }
    session.user.refresh()
    ...
    /* do stuff */
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

这是最佳做法吗?它能以更好和/或更简洁的方式完成吗?

grails controller grails-orm

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

Groovy域映射

我有一个将pdf报告保存到Oracle DB中.报告的dataType是byteArray.

域定义如下:

static constraints = {
 report(nullable:false)
 company(nullable:false)    
 month(nullable:false)    
}

byte[] report
Company company
Date month
Run Code Online (Sandbox Code Playgroud)

}

不幸的是,这在Oracle DB中定义了一个具有RAW data_type和255的长度的字段.

我该如何将这个字段定义到域类中?应该定义为BLOB?

如果是的话,怎么做?

提前致谢.

oracle grails groovy grails-orm domain-mapping

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

Grails Domain是否可能没有'id'?

是否可以创建一个没有'id'的表?例如,这是我的域名:

class SnbrActVector {

    int nid
    String term
    double weight

    static mapping = {
        version false
        id generator: 'identity'
    }

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

当我运行此SQL语句时,它失败:

insert into snbr_act_vector values (5, 'term', 0.5)
Run Code Online (Sandbox Code Playgroud)

我检查了表格,'id'已经设置为自动增量.我认为另一种选择是删除'id'本身.或者还有其他解决方法吗?请假设不能更改给定的SQL语句.

mysql grails hibernate grails-orm

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

GORM createCriteria和list不会返回相同的结果:我该怎么办?

我正在使用NimbleShiro作为我的安全框架,我刚刚遇到一个GORM错误.确实 :

User.createCriteria().list { 
   maxResults 10 
} 
Run Code Online (Sandbox Code Playgroud)

返回10个用户,User.list(max: 10) 返回9个用户!

经过进一步调查,我发现createCriteria 返回两次相同的用户(admin),因为admin有2个角色!(我不是在开玩笑).

似乎任何具有多于1个角色的用户将在createCriteria呼叫中返回两次并User.list返回max-1实例(即9个用户而不是10个用户)

我可以使用哪种解决方法来返回10个唯一身份用户?

这非常烦人,因为我无法正确使用分页.


我的域类是:

class UserBase { 
   String username 
   static belongsTo = [Role, Group] 
   static hasMany = [roles: Role, groups: Group] 
   static fetchMode = [roles: 'eager', groups: 'eager'] 
   static mapping = { 
     roles cache: true, 
     cascade: 'none', 
     cache usage: 'read-write', include: 'all' 
   } 
}

class User extends UserBase { …
Run Code Online (Sandbox Code Playgroud)

grails grails-orm shiro nimble

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

Grails - 如何在每次保存之前执行代码?

save()在域类的每次调用之前,是否有一种好的/标准的方法来执行一些公共代码?

例如,我的域名

class Page {

    String url
    Boolean processed
    Date date
    Integer urlCrc 
}
Run Code Online (Sandbox Code Playgroud)

我的表单只有3个第一个字段,我想在urlCrc每次save()调用方法时计算.我不能只是覆盖保存方法,因为它被注入.

grails grails-orm grails-domain-class

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

Grails:从src/groovy类访问域类的最佳方法是什么?

Grails 常见问题解答说:

问:如何从src/groovy中的源访问域类?

有时,您正在开发一些生活在src/groovy中的实用程序类,您打算在服务和其他工件中使用它们.但是,由于这些类是由Grails预编译的,因此无法实例化它们并编写类似Book.findByTitle("Groovy in> Action")的内容.但幸运的是,有一种解决方法,因为它可以这样做:

import org.codehaus.groovy.grails.commons.ApplicationHolder

// ...

def book = ApplicationHolder.application.getClassForName("library.Book").findByTitle("Groovy in Action")

应用程序必须在动态Gorm方法正常运行之前完成自举.

但是,似乎我可以直接导入域对象并在我的src/groovy类中使用GORM方法而没有任何问题,例如:

Book.findByTitle("Groovy in Action")
Run Code Online (Sandbox Code Playgroud)

由于不推荐使用ApplicationHolder,这个建议必须过时,但是仍然有理由避免直接从src/groovy使用域类吗?

grails grails-orm

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

继承的Gorm映射

我正面临着关于Grails继承的问题.我有一个域类Person.grooy:

class Person{
    String name
    String contactNumber
    Address address
} 
Run Code Online (Sandbox Code Playgroud)

现在,我正在为员工和客户扩展Person.groovy,如:

class Employee extends Person{
    String designation
}
class Customer extends Person{
    String interest
}
Run Code Online (Sandbox Code Playgroud)

现在我想在我的数据库中为Employee和Customer提供单独的表,其中包含Person列,即name,contactNumber和associate address key.我怎么能实现这一点.我搜索过每一个地方,但这方面没什么.这种方法在GORM中是不可能的吗?请回答.多谢你们

grails grails-orm grails-domain-class

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

如何在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的

Grails belongsTo文档中,有什么用处

   class Book {
    static belongsTo = Author
}
Run Code Online (Sandbox Code Playgroud)

当对作者执行CRUD操作时,级联操作对Book的影响是什么?

编辑:

感谢您的回复,可能是我没有正确指出我的问题.我想知道它们之间的区别

 static belongsTo [author:Author]
Run Code Online (Sandbox Code Playgroud)

VS

 static belongsTo = Author
Run Code Online (Sandbox Code Playgroud)

grails grails-orm belongs-to

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

grails:按嵌套属性排序

是否有可能通过嵌套的属性进行排序哪里查询

我有2个域类:

class Parent {
    String name
    Child child
}
Run Code Online (Sandbox Code Playgroud)

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

这有效:

Parent.where {}.list(sort: 'name')
Run Code Online (Sandbox Code Playgroud)

这不是:

Parent.where {}.list(sort: 'child.name')
Run Code Online (Sandbox Code Playgroud)

我有一个错误:

could not resolve property: child.name of: Parent
Run Code Online (Sandbox Code Playgroud)

我使用的是grails 2.3.x.

grails grails-orm

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