Hibernate Grails标准在集成测试中不起作用
我们有一个简单的方法,可以获取属性等于硬编码字符串的所有特定域对象。此方法位于MyDomainService中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
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
}