标签: grails-domain-class

继承的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 2.0.0M1配置信息?

如何从域对象或静态范围获取Config.groovy信息?我现在正在使用ConfigurationHolder.config.*,但是这个和ApplicationHolder已被弃用,所以我想'做对'...但是grailsApplication对象在DO /静态范围内不可用.

grails grails-domain-class

6
推荐指数
2
解决办法
5042
查看次数

使用JSON在Groovy/Grails中创建对象

我有一个Groovy/Grails网站,用于通过JSON向Android客户端发送数据.我创建了Android客户端和Groovy/Grails网站; 并且他们可以在JSON中输出相同的对象.

我可以通过将JSON输出映射到Java对象来成功在Android中创建相应的对象,但我想知道是否可以使用JSON输出在Groovy/Grails中创建新的域对象?有没有办法将JSON输出传递给控制器​​动作,以便创建对象?

这是我要发送的JSON示例;

{
    "class":"org.icc.callrz.BusinessCard.BusinessCard",
    "id":1,
    "businessCardDesigns":[],
    "emailAddrs":[
    {
        "class":"org.icc.callrz.BusinessCard.EmailAddress",
        "id":1,
        "address":"chris@krslynx.com",
        "businessCard":{
            "_ref":"../..",
            "class":"org.icc.callrz.BusinessCard.BusinessCard"
        },
        "index":0,
        "type":{
            "enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType",
            "name":"H"
        }
    },
    {
        "class":"org.icc.callrz.BusinessCard.EmailAddress",
        "id":2,
        "address":"cb@i-cc.cc",
        "businessCard":{
            "_ref":"../..",
            "class":"org.icc.callrz.BusinessCard.BusinessCard"
        },
        "index":1,
        "type":{
            "enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType",
            "name":"W"
        }
    }
    ]
}
Run Code Online (Sandbox Code Playgroud)

"类"与我要保存的域匹配,ID是域的ID,然后businessCardDesigns和emailAddrs中的每个项目都需要使用类似方法保存(在域中,businessCardDesigns和emailAddrs是ArrayLists ).提前谢谢了!

解:

@RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json")
public ResponseEntity<String> createFromJson(@RequestBody String json) {
    Owner.fromJsonToOwner(json).persist();
    return new ResponseEntity<String>(HttpStatus.CREATED);
}
Run Code Online (Sandbox Code Playgroud)

grails groovy android grails-controller grails-domain-class

6
推荐指数
3
解决办法
7590
查看次数

我应该将我的Grails域关系转换为使用Hibernate Bags吗?

Grails 1.3.7中,我根据Burt在http://www.infoq.com/presentations/GORM-Performance中的建议花了很长时间来转换我的域类关系.

现在,Grails 2支持Hibernate的包,我正在考虑将我的更改恢复为hasMany/ belongsTo.

  1. 我会选择哪种方式更具未来性?
  2. 如果我坚持手动/显式实现可能会出现哪些问题?
  3. 如果我换成手袋可能会出现哪些问题?
  4. 两种变体相比,是否有任何优势?

请注意,应用程序将在多年内看到长期改进(因此没有"部署即忘记":).

更新:一个主要问题是,如果我在应用程序上线后进行更改,那么在数据库中手动更改会产生多少麻烦.目前尚未发布,所以在Go-Live之前它是合理的.

更新:答案

在2011年11月的博客文章" Grails 2.0中Hibernate Bags "中,Burt Beckwith描述了Grails 2中的Bags问题并得出结论:

所以我想我已经回过头来提倡早先的谈话了.不要在Author类中映射Books集合,而是将Book字段添加到Book类中

所以答案是坚持使用转换后的(即非设置/ -list/-bag)变体.

请投票重新打开此帖子,以便以正确的方式回答和接受.

grails persistence hibernate grails-orm grails-domain-class

6
推荐指数
0
解决办法
537
查看次数

Grails条件可空验证或具有可空选项的自定义验证程序

我有一个表单来创建一个地方.根据国家/地区,省(州,地区)字段是否必需.

当不需要时,我想为null,而不是空字符串.我有代码,使所有空表单字段,null:

def newparams = [:]
        place = new Place()
        params.each() { k, v ->
            if (v instanceof String && place.hasProperty(k)) {
                if (!v.trim().length()) {
                    newparams[k] = null
                } else {
                    newparams[k] = v
                }
            }
        }

        place = new Place(newparams)
        place.validate()
Run Code Online (Sandbox Code Playgroud)

现在,在地方域中,我在该省有一个验证器:

province validator:  {val, obj -> if (obj.country in obj.requiresRegionCountries() && !obj.province) return [province.required]}
Run Code Online (Sandbox Code Playgroud)

有了这个规则,即使是否需要,我总是得到"省不能为空".

我认为这是因为设置的可空验证器默认为false.

如果我添加nullable:true,那么即使省是必需的,也会跳过自定义验证器,并且可以使用空省保存(我认为这是因为它实例化为null)

现在,我需要以某种方式我的自定义验证器,并能够在我的验证器中指定可为空的内容,如下所示:

province validator:  {val, obj -> 
  if (obj.country in obj.requiresRegionCountries() && !obj.province) { 
    nullable: false
    return [province.required] }
  else {
    nullable: …
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
2
解决办法
7986
查看次数

Grails Scaffolding - 为域类的此属性定义可能的值

我是Grails的新手.我有一个Person域类:

class Person {
    String firstName
    String lastName
    String gender
    Date dateOfBirth
}
Run Code Online (Sandbox Code Playgroud)

并且想知道我是否可以为属性定义可能的值 - 比如性别为{M,F,U},这样当为Person控制器使用动态脚手架时,这三个值将在组合框中列出.

在这里,我只是想知道Grails框架中是否有这样的功能?如果存在此功能,那么我该如何使用它?

grails grails-domain-class grails-constraints

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

如何在Grails 2.2中为Domain Class Values设置默认值?

在我的Grails域类中,我想设置在数据库中保留的默认值.我使用mysql作为数据库.我试着这样做:

class A {

   long someValue = 1
   long someOtherValue
   boolean someBool = true
   boolean someOtherBool

   static mapping = {
      someOtherValue defaultValue: 1
      someOtherBool defaultValue: true  
   }
}
Run Code Online (Sandbox Code Playgroud)

但没有任何作用.数据库中没有设置默认值.我需要更改什么才能正确设置默认值?

grails grails-domain-class grails-2.0

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

Grails/Hibernate:不存在具有给定标识符的行

我有一个域名如下:

class Author {
    String id
    static hasMany = [accounts: Account]
    static belongsTo = Account
    static mapping = {
        accounts joinTable: [name: "SOMETABLE", key: 'SOMEFIELD'], 
                 ignoreNotFound: true
    }
    static constraints = {}
}
Run Code Online (Sandbox Code Playgroud)

没有找到记录时,我收到以下错误.我尝试了ignoreNotFound,它无法正常工作.

error message: accounts=org.hibernate.ObjectNotFoundException: 
No row with the given identifier exists: 
[com.myapplication.Account#123465489785]
Run Code Online (Sandbox Code Playgroud)

尝试选择您无权在数据库中插入的连接2记录时会发生这种情况.请问有解决方法吗?

java grails hibernate grails-orm grails-domain-class

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

Grails-ElasticSearch插件:域实例的条件索引

我正在使用Grails-ElasticSearch插件(0.0.2.5).我想在我的域实例中添加约束,然后在ElasticSearch中对其进行索引.

示例: - 我有一个带有字段'status'的域类A,我想在Database和ElasticSearch之间添加一个抽象,即所有实例都应填入数据库,但应将具有ACTIVE状态的实例发送到elasticsearch.

请建议是否可以这样做?

谢谢,Karan

grails grails-plugin grails-domain-class elasticsearch

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

包'myPackageName'中已存在类'myClassName'

我在使用IntelliJ处理Grails应用程序时突然遇到一个奇怪的问题.我有不同的域类和其他一些类src/groovy.当我打开一个类文件进行一些更改时,我得到一个错误,这个类已经存在于我没有的包中.我尝试使用重构重命名该类,但之后我仍然得到相同的错误.

任何人都可以在这里暗示什么是错的,或者我做错了什么?

grails intellij-idea grails-domain-class

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