【问题标题】:No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here没有 Hibernate Session 绑定到线程,并且配置不允许在这里创建非事务性会话
【发布时间】:2010-02-10 11:22:56
【问题描述】:

在控制器中:

AssocCovList.addAssoc(3, 4)

在域中:

package com.org.domain
class AssocCovList {
    Integer id
    Integer association_id
    Integer cov_list_id
    Date edit_date

    static belongsTo = [association : Association, cov_list : CoverageList]

    static constraints = {
        edit_date(nullable:true )
    }

    static mapping = {
        table 'assoc_cov_list'
        version false
        columns {
        id column : 'ASSOC_COV_LIST_ID'
        association_id column : 'ASSOCIATION_ID'
        cov_list_id column : 'COV_LIST_ID'
        edit_date column : 'EDIT_DATE'
        }
    }


def static addAssoc(3, 4){
   def aclist = new AssocCovList(association_id:3,cov_list_id:4, edit_date:new Date())
   aclist.save()
}


这里是sql结构:

创建表omni.assoc_cov_list (
ASSOC_COV_LIST_ID int(11) NOT NULL auto_increment,
ASSOCIATION_ID smallint(6) NOT NULL default '0',
COV_LIST_ID int(11) NOT NULL 默认 '0',
EDIT_DATE 日期默认 NULL,
主键 (ASSOC_COV_LIST_ID),
唯一键 ASSOC_COV_LIST_I2 (ASSOCIATION_ID,COV_LIST_ID),
ASSOC_COV_LIST_FK1 (COV_LIST_ID),
ASSOC_COV_LIST_FK2 (ASSOCIATION_ID)
) ENGINE=InnoDB AUTO_INCREMENT=9584 默认字符集=utf8;

这是返回 No Hibernate Session bound to thread,并且配置不允许在这里创建非事务性会话

为什么它返回空对象? 我能够更新和删除记录。不适用于新记录。

【问题讨论】:

    标签: grails


    【解决方案1】:

    等一下...我认为域类本身不是在其自身上调用 save() 的正确位置! 这应该在控制器或服务级别完成。你能试试这个吗:

    在您的域类中:

    def static addAssoc(<yourargs>){
        return new AssocList(/*Whatever arguments you pass */)
    }
    

    在您的控制器中:

    AssocCovList.addAssoc(<yourargs>).save()    
    

    【讨论】:

    • 您可能需要阅读 groovy.codehaus.org/Groovy+Beans 来了解 Groovy 构造函数的基础知识
    • 好点 ;-) 感谢您让我的大脑焕然一新。我对可空属性的假设是否正确?
    • 大家好,创建不适用于此域,我可以在其他域上创建新记录。您能否再次浏览一下帖子(我编辑了我收到的代码和错误消息)。 @Philippe - 我试过你的例子,但同样的错误发生了。我还可以提供更多代码和 sql 架构。提前致谢
    • 查看我的新答案以获得另一个想法......希望它是正确的,虽然我没有测试它
    • 感谢 Philippe 的输入 - 我刚刚尝试过,但结果相同的错误“没有 Hibernate Session 绑定到线程,并且配置不允许在此处创建非事务性会话” - 我的 id 是自动的递增并且应该动态创建。
    【解决方案2】:

    您将AssocCovList 定义为具有以下属性:

    Integer id
    Integer association_id
    Integer cov_list_id
    Date edit_date
    

    然后尝试仅使用association_id 创建new AssocCovList(association_id:3)。但是,默认情况下,所有属性都是 persistent必需。要创建新的AssocCovList,您还需要提供idcov_list_idedit_date

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多