本文共 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/