У нас есть простой метод, который получает весь конкретный объект домена, где свойство равно жестко закодированной строке.Этот метод находится в MyDomainService.
def List<MyDomain> getAllDomain()
{
List resultList
def criteria = MyDomain.createCriteria()
resultList = criteria.list()
{
eq('property1', 'READY')
}
return resultList
}
Мы также пишем простой интеграционный тест для этого метода.Тест выглядит следующим образом.
void testGetAllDomain()
{
List original = MyDomain.list()
original.each{
it.property1 = 'NOTREADY'
it.save(flush:true)
}
def result = MyDomainService.getAllDomain()
assertEquals 0, result.size() //All objects should be set to NOTREADY, and not retrieved. THIS is failing.
}
Я попытался установить
def transactional = false
и оставить свой код как есть.Я попытался установить для транзакции значение 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
}
, то результаты вернутся, как и ожидалось.Это заставляет меня поверить, что это как-то связано с транзакцией в интеграционном тесте.Есть идеи?