首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Grails域对象未持久化

Grails域对象未持久化
EN

Stack Overflow用户
提问于 2017-06-23 22:43:16
回答 2查看 592关注 0票数 2

Grails 3.2.10、Gorm 6.1.4、Hibernate 5.2.9

我有一个grails域对象和一个相应的控制器,它执行基本的crud操作(它没有脚手架)。当将Command对象提交给控制器的update方法时,控制器会按预期执行(所有日志消息都会按预期打印),并且不会抛出任何错误。重定向页面的显示方式与您预期的一样,并显示flash消息(即使包含更新的数据)。但是,数据库值不会实际更新。我可以创建对象,它只在更新时这样做。

EN

回答 2

Stack Overflow用户

发布于 2017-06-23 22:43:16

在经历了许多挫折之后,最新的Gorm或Hibernate似乎正在监视域对象上的setXXX方法,如果这些方法没有被调用,hibernate将不会看到对象被修改,也不会更新任何更改。调高日志级别可以帮助我看到hibernate没有看到对象被修改,因此忽略了它。

我的问题集中在在调用this.xxx = CommandObject.xxx;的域对象中使用setData(CommandObject)方法,从而绕过生成的setter,导致hibernate认为对象没有被修改。

直接从控制器调用setter是解决此问题的一种方法。

示例(不起作用):

代码语言:javascript
运行
复制
class Person {
  String name
  //...typical constraints, methods, etc...
  void setData(PersonCommand c){
    this.name = c.name;
  }
}

class PersonController {
  //...typical list, show, create methods...
  def update(PersonCommand pc){
     //... validation ...
     Person p = Person.get(pc.personId);
     p.setData(pc);
     p.save(failOnError: true);
     flash.message = "Successfully saved person ${p.name}"
     redirect(action: 'show', id: p.id)
  }
}

修复的示例(确实有效):

代码语言:javascript
运行
复制
class Person {
  String name
  //...typical constraints, methods, etc...
}

class PersonController {
  //...typical list, show, create methods...
  def update(PersonCommand pc){
     //... validation ...
     Person p = Person.get(pc.personId);
     p.name = pc.name;
     //... set other fields ...
     p.save(failOnError: true);
     flash.message = "Successfully saved person ${p.name}"
     redirect(action: 'show', id: p.id)
  }
}
票数 2
EN

Stack Overflow用户

发布于 2017-06-24 00:06:01

这是一个广为人知的领域类。您必须在其他域类的方法中显式调用setter或getter:

代码语言:javascript
运行
复制
class Person {
  String name
  void setData(PersonCommand c){
    setName c.name
  }
}

另外,我会像applyData()一样将setData()重命名为smth,以避免与POGOs方法发生冲突

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44724206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档