2013-09-23 3 views
1

Все это на Grails 2.2.3.grails removeFrom не работает в тесте интеграции

У меня есть два класса, в связи один-ко-многим, и сервис, который удаляет список идентификаторов

class Box { 
    String name 
    static hasMany = [items:ItemDomain] 

    static constraints = { 
    items(nullable:true) 
    } 
} 

и

class ItemDomain { String name Box box 

    static belongsTo = Box 

    static constraints = { 
    name(blank:false,unique:['box'], maxSize:127) 
    box(nullable:false) } } 

В службе, вот раздел проблемы:

def itemsToDelete = params.itemsToDelete //List of DB ids 
List<ItemDomain> items= [] 
items.addAll(box.items) //Copy the list to avoid concurrent mod exception 
for(ItemDomain item : items) 
{ 
    if(itemsToDelete.contains(item.id)) 
    { 
    box.removeFromItems(item) 
    item.delete() 
    } 
    box.save(flush: true) 
} 

Это нормально работает при запуске приложения, но от тестирования интеграции он не работает с

InvalidDataAccessApiUsageException: deleted object would be re-saved by cascade (remove deleted object from associations) 

Если я вынимаю флеш, и в конце концов он потерпит неудачу с:

Field error in object 'mypackage.ItemDomain' on field 'box': rejected value [null]; 

Добавление протоколирования, я вижу, размер box.items перед входом в цикл такой же, как это после того, как выходя из цикла, распечатывая элементы в цикле до и после, показывает, что поле item.box для удаленных элементов изменяется на null. Я попытался возиться с каскадным отображением в родительском классе ... Я в недоумении относительно того, что я делаю что-то неправильно или это проблема с интеграционным тестированием. Единственные подобные проблемы, которые я нашел, были против grails 1.1 и не имели разрешения в тех нитях, которые я нашел.

Я ценю любую обратную связь.

+0

Сначала удалите из окна, затем сохраните поле, а затем удалите элемент. –

ответ

0

Итак, неудивительно, что я делал что-то неправильно. Оказывается, мои реализации equals() и hashCode() в классе ItemDomain включали поле, которое никогда не должно было меняться, но из-за требований ползучести теперь менялось, и методы никогда не обновлялись должным образом.

Смежные вопросы