【问题标题】:How to resolve don't flush the Session after an exception occurs如何解决发生异常后不刷新Session
【发布时间】:2014-04-07 07:59:11
【问题描述】:

这是我的代码

try {
  if(request.currentOrganization) {
    Test test = new Test()
    test.organization = request.currentOrganization
    test.save()
  }
} catch(Exception ignoreMe) {
     //println("Unable to update notification table : " + ignoreMe.message)
}

而且这里不需要这个期望,看起来很奇怪,这个话题的其他一些答案对我没有帮助,有人可以帮我解决这个问题

例外

org.hibernate.AssertionFailure: null id in com.rwi.base.test entry (don't flush the Session after an exception occurs

【问题讨论】:

  • 首先你为什么不用Encapsulation这个词?第二个至少邮政编码DailyServiceNotification
  • 我的意思是组织的getter/setter

标签: hibernate session grails grails-orm


【解决方案1】:

问题可能是您在 DailyServiceNotification 中提交了某些文件,在 Java 中是 null,并且您正在尝试将其持久化,但数据库中的相应列是 NOT NULL

【讨论】:

  • 是的,我认为你是对的,但一些解决方案会帮助我
【解决方案2】:

看起来您的 request.currentOrganization 已与休眠会话分离。要修复它,您可以使用:

def organization = Organization.get( request.currentOrganization.id )
notification.organization = organization

【讨论】:

  • 你的回答有点意思,这发生在现场而不是本地,所以让我检查一下,也只是看看预期。在不同位置引发异常的点,该异常是此错误的根本原因
  • com.rwi.messaging.CommentThreadService.getAllItemForType(CommentThreadService.groovy:242) 发生了什么?
  • 但这在本地运行良好,在现场没有问题(代码本身不言自明,可用注释类型我们得到所有 cmets),但我认为这是我必须检查的地方你对 withNewSession 有什么想法吗
  • 方法名称确实是不言自明的,但是它抛出了一个assertFailure,这就是我问它的原因。是的,我对withNewSession 有一个想法,它非常简单:它的使用领域相对较小
  • 所以如果我使用像 DailyServiceNotification notification = new DailyServiceNotification() notification.withNewSession { notification.organization = request.currentOrganization notification.save() },这是否是一个坏代码,还是推荐?
猜你喜欢
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2011-07-15
  • 1970-01-01
  • 2012-01-28
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多