Операция удаления GORM: найдено два представления одной коллекции - PullRequest
0 голосов
/ 18 мая 2011
@Entity
public class Contact{
    List associations

    static hasMany[
    associations:Contact
    ]

    static mapping[
    associations cascade:"all-delete-orphan"
    ]
}

и у меня есть служба для удаления ассоциаций из Contact сущности, подобной этой

Contact.withTransaction{status ->
        user.contacts.collect{Contact c->
            c.associations.collect{Contact association->
                c.associations.remove(association)
            }
        }
     }

, при попытке этого я получаю org.hibernate.HibernateException:Found two representations of same collection: Contact.associations

, я делаю ошибку или любуюДругой способ удалить ассоциации из Контакта?

Ответы [ 3 ]

1 голос
/ 18 мая 2011

Прежде всего, вы не должны использовать коллекцию в этом случае.Я думаю, что соответствующий метод будет каждый.вам не нужно использовать withTransaction на этом этапе, ожидая, что вы будете использовать новый сеанс гибернации.попробуйте это:

def assocs = []
// store collection to avoid concurrent modification exception by during delection with in each   method
assocs += user.contacts.associations
assocs.each {
   // because of your cascase setting all orphans will be deleted automatically
   user.contacts.removeFromAssociations(it)
}
0 голосов
/ 23 мая 2011

Я решил проблему.Проблема была из-за удаления ассоциаций, которые в массиве.Когда я получаю список контактов, это также дает мне ассоциации, потому что ассоциации также являются примером контакта.Итак, во-первых, я получаю список контактов с SQL-запросом, получая только контакты, затем я удалил ассоциации контактов.Большое спасибо всем, особенно Hoàng Long:)

0 голосов
/ 18 мая 2011

Я думаю, что есть более короткий способ выполнить задачу:

def contact = Contact.get(...) // retrieve a contact
contact.associations.clear() // remove all associations of the contact

Если вы не знакомы с GORM, лучше начать с этого сообщения в блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...