Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Grails标准在集成测试中不起作用_Hibernate_Spring_Grails_Groovy_Transactions - Fatal编程技术网

Hibernate Grails标准在集成测试中不起作用

Hibernate Grails标准在集成测试中不起作用,hibernate,spring,grails,groovy,transactions,Hibernate,Spring,Grails,Groovy,Transactions,我们有一个简单的方法,可以获取属性等于硬编码字符串的所有特定域对象。此方法位于MyDomainService中 def List<MyDomain> getAllDomain() { List resultList def criteria = MyDomain.createCriteria() resultList = criteria.list() { eq('property1', 'READY') } return

我们有一个简单的方法,可以获取属性等于硬编码字符串的所有特定域对象。此方法位于MyDomainService中

def List<MyDomain> getAllDomain()
{
    List resultList
    def criteria = MyDomain.createCriteria()
    resultList = criteria.list()
    {
       eq('property1', 'READY')
    }
    return resultList
 }
我试过了

def transactional = false
让我的代码保持原样。我尝试将transactional设置为false,并将代码包装在.withTransaction{}中。我还尝试了标准配置,但没有成功。我注意到的是如果我

def List<MyDomain> getAllDomain()
{
   List original = MyDomain.list()
    original.each{
      it.property1 = 'NOTREADY'
      it.save(flush:true)
    }
   List resultList
   def criteria = MyDomain.createCriteria()
   resultList = criteria.list()
   {
      eq('property1', 'READY')
   }
   return resultList
 }
def List getAllDomain()
{
List original=MyDomain.List()
原件,每份{
it.property1='NOTREADY'
it.save(刷新:true)
}
列表结果列表
def criteria=MyDomain.createCriteria()
resultList=criteria.list()
{
等式('property1','READY')
}
返回结果列表
}

然后结果如预期的那样回来了。这让我相信它与集成测试中的事务有关。有什么想法吗?

通过将
failOnError:true
添加到
it.save(flush:true)
中,验证您确实在保存对象。另外,还要验证您的集成测试没有扩展GrailsUnitTestCase或它的任何子类,并且没有其他测试类与元类发生冲突,也没有自行清理。我怀疑这笔交易与此有关。如果设置了
transactional=false
,并且在测试之后,数据库中的值没有更改。然后,保存操作出现问题,例如验证失败


您很少需要将集成测试设置为不包含在事务中,并且当您这样做时,您应该对Hibernate的会话和缓存有很好的了解。

您不太清楚返回的结果是什么。我总是忘记验证只涉及这么多事情。将failOnError设置为true向我展示了这个问题(这源于有人将inList:添加到我们的域对象),而且,我将验证放在了错误的位置。测试中的第二次保存验证良好,但第一次失败。感谢againI建议您在config.groovy设置中
grails.gorm.failOnError=true
然后处理您不希望为true的特定情况。
def List<MyDomain> getAllDomain()
{
   List original = MyDomain.list()
    original.each{
      it.property1 = 'NOTREADY'
      it.save(flush:true)
    }
   List resultList
   def criteria = MyDomain.createCriteria()
   resultList = criteria.list()
   {
      eq('property1', 'READY')
   }
   return resultList
 }