2015-04-01 2 views
3

У меня есть 2 абстрактных Grails классов домена, которые выглядят какGORM абстрактного домен класс

abstract class A { 
    static hasMany = [ b : B ] 
    static mapping = { 
    tablePerHierarchy false 
    } 
} 

class AChild extends A { 
} 

abstract class B { 
    static belongsTo = A 
    static mapping = { 
    tablePerHierarchy false 
    } 
} 

class BChild extends B { 
} 

У меня есть некоторый код, который делает

A a = new AChild() 
a.b << new BChild() 
a.save(flush:true) 

Это работает, как ожидалось

Теперь, когда я пытаюсь

b.delete(flush:true) 

Этот недостаток s из-за нарушения ссылочной целостности в таблице соединений, созданной между A/B. Похоже, что первый запрос GORM, как часть удаления, состоит в том, чтобы сделать удаление из таблицы B, а не в таблицу соединений, а соединение ссылается на таблицу B по ее идентификатору, что вызывает нарушение.

delete from b where id=? and version=? 

Поэтому я хотел бы сохранить A и B в папке домена так что я могу сделать что-то вроде A.list(), так что перемещение его на src/groovy будет только самый последний вариант.

+0

хороший вопрос, если A не был абстрактным, будет b.delete() успешным? – dsharew

+0

Я не пробовал все комбинации абстрактных/не-абстрактных, чтобы увидеть, что работает. Но у меня есть другие отношения в моем коде, которые работают нормально, поэтому я предполагаю, что это проблема абстрактной проблемы. в любом случае, я сообщил об этом команде grails. –

ответ

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