博客
关于我
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
阅读量:803 次
发布时间:2023-02-16

本文共 804 字,大约阅读时间需要 2 分钟。

在Grails应用中使用GSP页面查询数据库时,出现了一个关于数据存储会话绑定的错误。具体来说,错误信息提示“No Datastore Session bound to thread, and configuration does not allow creation of non-transactional one here”,即“没有数据存储会话绑定到线程,且配置不允许在此处创建非事务性数据存储会话”。这个问题通常发生在使用域内类查询时。

错误发生在以下代码中:

此处,Tag.get(article.tagId)会触发一个域内查询,而Grails默认会为此启动一个事务性数据存储会话。如果事务性数据存储配置不正确,或者会话无法正确绑定到线程,可能会导致此错误。

错误分析:

  • 错误原因

    在使用域内类进行数据库查询时,Grails会默认使用事务性数据存储来确保查询的原子性。如果事务性数据存储配置不当,或者应用没有正确绑定数据存储会话到当前线程,可能会导致“No Datastore Session bound to thread”的错误。

  • 解决方法

    将查询操作包装在yourDomainClass.withTransaction{}中,可以确保查询操作在一个事务内进行,从而避免数据存储会话绑定问题。修改后的代码如下:

  • 修改后的代码示例:

    将上述代码修改为:

    这样可以确保查询操作在一个事务内完成,从而避免数据存储会话绑定问题。

    注意事项:

    • 确保在使用域内查询时,事务性数据存储配置正确。如果应用运行在开发环境中,通常会启用非事务性数据存储,但在生产环境中需要确保事务性数据存储配置正确。
    • 如果错误依然存在,可能需要检查数据存储配置以及会话管理器的设置,确保事务性数据存储会话能够正确绑定到线程。

    通过上述修改,可以解决在GSP页面使用域内查询时的数据存储会话绑定错误。

    转载地址:http://hjjfk.baihongyu.com/

    你可能感兴趣的文章
    OpenGL glBlendFunc() 设置颜色混合 透明度叠加计算
    查看>>
    OpenGL 中“立即模式”是什么意思?
    查看>>
    opengl 教程(15) 摄像机控制(2)
    查看>>
    opengl 深度详解,多重采样时,如何在OpenGL纹理中解析深度值?
    查看>>
    OpenGL 的内置矩阵种种
    查看>>
    OpenGL/OpenGL ES 入门:基础变换 - 初识向量/矩阵
    查看>>
    OpenGL中shader读取实现
    查看>>
    OpenGL中旋转平移缩放等变换的顺序对模型的影响
    查看>>
    Opengl中的gluProject函数认识
    查看>>
    OpenGl介绍
    查看>>
    OPENGL半透明图像产生黑色光环
    查看>>
    OpenGL和图形卡
    查看>>
    OpenGL字体绘制
    查看>>
    OpenGL学习
    查看>>
    openGL学习步骤
    查看>>
    OpenGL的基本概念介绍
    查看>>
    OpenGL着色器、纹理开发案例
    查看>>
    OpenGL程序无法启动此应用程序,因为计算机中丢失glut32.dll(转))
    查看>>
    opengl绘制几何体的函数
    查看>>
    openGL缓存概念和缓存清除(01)
    查看>>