标签: grails-domain-class

什么时候应该使用grails域类中的N:1关系?

在grails中,我可以实现这样的N:1关系:

class Parent { hasMany = [children:Child] }
class Child  { belongsTo = [parent:Parent] }
Run Code Online (Sandbox Code Playgroud)

现在(如果总是正确使用addTo和removeFrom)我可以通过parent.children获取Parent的子项.

但我也可以在没有hasMany的情况下做到这一点:

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

然后我必须使用Child.findAllByParent(parent)来获取所有孩子.

我的问题:如果能以第二种方式查询父母的孩子,我有什么理由可以使用hasMany吗?

我想它有时更容易(也许更快,如果与父母一起渴望获取?)只是引用parent.children,但另一方面,当有几个孩子时,这个List会变得相当长.而我不喜欢的事情还有很多,你总是需要注意addTo或removeFrom,或者在添加一个带有Parent的新Child之后清除会话,以便grails自动执行此操作...

答案是你应该简单地使用hasMany如果有很少的孩子并且如果有很多孩子而不使用它(出于性能原因),或者还有更多的孩子?

orm grails hibernate grails-domain-class

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

如何在grails域类中调整Map的约束/数据库映射

关注grails域类:

class MyClass {
  Map myMap
}
Run Code Online (Sandbox Code Playgroud)

现在,对于myMap,grails会自动为地图中的元素创建一个新表.但是,如果我添加太长的元素(例如1024个字符),我会收到DB错误.

我可以以某种方式告诉grails使myMap表中的相应列足够大以允许更大的字符串,或者我是否必须在数据库中手动执行此操作?

我已经试过了

static constraints = {
  myMap(maxSize:1024)
}
Run Code Online (Sandbox Code Playgroud)

哪个不起作用(正如预期的那样,因为maxSize应该引用Map的值而不是Map本身).

如果不是通过约束,也许有办法通过约束

static mapping { ... }
Run Code Online (Sandbox Code Playgroud)

database mapping grails hibernate-mapping grails-domain-class

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

如何在Grails中更改列名约定?

现在我有字段"String firstName"它转换为"first_name",我希望"firstname"作为Hibernate的默认值.它可以吗?

grails groovy grails-domain-class

5
推荐指数
2
解决办法
7322
查看次数

如何伪造验证错误?

我正在使用Grails Webflow插件.以下是我正在使用的域对象:

class Foo implements Serializable {
    String fooProp1,
           fooProp2

    static constraints = {
        fooProp2 nullable: false
    }
}

class Bar implements Serializable {
    Foo fooObject

    static constraints = {
        fooObject nullable: false
    }
}
Run Code Online (Sandbox Code Playgroud)

在webflow中的某个点上,我需要确保fooObject.fooProp1不为null.如果是,我想抛出一个错误并强制用户为它提供一个值.我尝试使用validate()来执行此操作(在Bar和Foo对象上),但由于fooProp1具有nullable:true属性,因此它会通过验证.有任何想法吗?

grails spring-webflow grails-domain-class

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

如何为Grails域类中的两个字段创建和XOR验证?

我有一个问题,我的域类有两个潜在的互斥外部密钥,序列号或遗留查找值.

由于我不确定任何给定条目我将拥有哪一个,我已经使它们都可以为空并添加自定义验证以确保我只有一个值.

package myproject 

class Sample {

    String information
    String legacyLookup
    String serialNumber

    static constraints = {
        information(nullable: true)
        legacyLookup(nullable: true)
        serialNumber(nullable: true)

        legacyLookup validator: {
            return ((serialNumber != null && legacyLookup == null) || (serialNumber == null && legacyLookup != null))
        }

        serialNumber validator: {
            return ((serialNumber != null && legacyLookup == null) || (serialNumber == null && legacyLookup != null))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我创建了默认的CRUD屏幕,并尝试为此域类创建一个条目

information: Blah Blah
serialNumber: 
legacyLookup: BLAHINDEX123
Run Code Online (Sandbox Code Playgroud)

这在验证器中死亡,并带有以下消息:

No such property: serialNumber for class: myproject.Sample …
Run Code Online (Sandbox Code Playgroud)

grails grails-validation grails-domain-class

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

Grails中数据库迁移的良好工作流程是什么?

我想使用database-migration grails插件进行数据库迁移.当我第一次启动Grails应用程序时,会自动创建所有数据库表.我的DataSource.groovy中的生产设置是:

production {


    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost/myapp?useUnicode=yes&characterEncoding=UTF-8"
        username = "test"
        password = "test"
        dialect = org.hibernate.dialect.MySQL5InnoDBDialect
        properties {
           validationQuery = "select 1"
           testWhileIdle = true
           timeBetweenEvictionRunsMillis = 60000
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的config.groovy中,我设置:

grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']
Run Code Online (Sandbox Code Playgroud)

当我向域类添加属性时,我需要调整changelog文件.在这种情况下,进行数据库迁移的最佳方法是什么?添加或删除列时,我必须执行哪些步骤?

grails database-migration grails-domain-class

5
推荐指数
2
解决办法
4442
查看次数

通过支持嵌入式关联反序列化JSON对象

是否有一种简单的方法可以将JSON字符串反序列化为域类,并支持嵌入式关联; belongsTo和hasMany

{
  name: "Customer",
  contact: {
    name: "Contact"
  }
} 

class Customer {
  name 
  Contact contact
}

class Contact {
  String name
  static belongsTo = [customer:Customer]
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中我想做以下事情

def save() {
   def customer = new Customer(request.JSON)
   customer.save();
}
Run Code Online (Sandbox Code Playgroud)

现在我被迫做了

def save() {
   def contact = new Contact(request.JSON.contact);
   def customer = new Customer(request.JSON);
   customer.contact = contact;
   customer.save();
}
Run Code Online (Sandbox Code Playgroud)

grails grails-controller grails-domain-class grails-2.0

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

Grails命令对象自定义验证消息代码

使用命令对象时:

class UserCommand {

   String name

   static constraints = {
      name blank: false, unique: true, minSize: 3
   }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用它们来验证对象,而不会使它们持久化.在我的情况下,我将验证持久类用户.

在控制器中:

def save(UserCommand cmd) {
  if(!cmd.validate()) {
      render view: "create", model: [user: cmd]
  return
  }
  def user = new User()
  user.name = cmd.name
  user.save()

  redirect uri: '/'

} 
Run Code Online (Sandbox Code Playgroud)

在messages.properties中:

user.username.minSize.error=Please enter at least three characters.
userCommand.username.minSize.error=Please enter at least three characters.
Run Code Online (Sandbox Code Playgroud)

使用自定义验证消息时,您必须为每个错误编写两次消息代码.一个用于User类,另一个用于UserCommand类.

有没有办法我每个错误只能有一个消息代码?

validation grails grails-validation grails-domain-class grails-2.0

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

在Grails Domain Class中设置Date字段的默认值

我正在尝试为DateDomain类中的字段设置默认值.

我可以使用defaultValuemapping配置,但它不与工作Date领域(我就试了一下String,并Integer和正常工作).

这是一个例子:

class Something {

    Date myField

    static mapping = {
        myField defaultValue: new Date()
    }

}
Run Code Online (Sandbox Code Playgroud)

此代码失败,因为Hibernate生成的CREATE语句不正确.它是这样的:

... my_field datetime default Mon Nov 25 17:59:08 UYST 2013 not null ...
Run Code Online (Sandbox Code Playgroud)

grails grails-domain-class

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

自定义Grails验证

我想检查以确保两个字段不相等,一个字段大于另一个字段.说yearBornyearMarried.他们不能平等,yearMarried必须更大yearBorn.

validation grails grails-validation grails-domain-class

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