【问题标题】:Groovy (Grails) named parameters constructor doesn't set superclass fieldsGroovy(Grails)命名参数构造函数不设置超类字段
【发布时间】:2014-01-31 14:31:00
【问题描述】:

Groovy 新手。所以我有一个超类

class AbstractClass {
User user
}

和一个子类

class Category extends AbstractClass {
String name
}

当我尝试在 BootStrap.groovy(我正在使用 Grails)中创建对象时,例如:

User user1 = new User(...).save(failOnError: true)
// I know user1 is properly created
def category1 = new Category(User: user1, name: 'alice').save(failOnError: true)

好吧,我的问题是没有设置用户字段。它是空的。这已更改:以前,我没有保存用户,而是保存了它的 ID(长 ID)并且它正在工作。这里有什么我缺少的魔法吗?

当我将代码更改为:

def category1 = new Category(User: user1, name: 'alice')
category1.setUser user1
category1.save(failOnError: true)

它工作得很好,所以我想这里一定有我遗漏的东西。

感谢您的帮助!

【问题讨论】:

  • 在第一种情况下,grails 可能没有将用户持久化到数据库中,它可能只是在 Hibernate 会话中 - 您可以尝试在保存语句中添加 flush:true用户看看这是否有效?例如。 new User(...).save(flush:true, failOnError:true)
  • 感谢 bschipp,但这是一个错字。用户应该是用户。

标签: grails groovy superclass named-parameters


【解决方案1】:

class AbstractClass {
  User user
}

该类有一个属性,其名称user(小u),其类型User(大写U),因此

new Category(User: user1, name: 'alice')

应该是

new Category(user: user1, name: 'alice')

以匹配属性名称。请记住,与 Java 一样,Groovy 也是区分大小写的。

【讨论】:

  • 废话!!错字。谢谢,我为此损失了半个小时。
猜你喜欢
  • 1970-01-01
  • 2014-11-03
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
相关资源
最近更新 更多