У меня есть 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
будет только самый последний вариант.
хороший вопрос, если A не был абстрактным, будет b.delete() успешным? – dsharew
Я не пробовал все комбинации абстрактных/не-абстрактных, чтобы увидеть, что работает. Но у меня есть другие отношения в моем коде, которые работают нормально, поэтому я предполагаю, что это проблема абстрактной проблемы. в любом случае, я сообщил об этом команде grails. –