2015-04-01 70 views
3

我有一個看起來像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 { 
} 

2個抽象Grails領域類的,我有一些代碼,不會

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

可正常工作

現在,當我嘗試要做

b.delete(flush:true) 

這個失敗因爲在A/B之間創建的連接表中存在參照完整性違規。它看起來像GORM作爲刪除的一部分的第一個查詢是從B表中刪除而不是連接表,並且該連接有一個引用返回到B表的引用違反。

delete from b where id=? and version=? 

我想保持AB域中文件夾的原因是這樣我就可以做這樣的事情A.list(),所以移動它出來src/groovy就只能是最後的選擇。

+0

不錯的問題,如果A不抽象會不會b.delete()成功? – dsharew 2015-04-02 06:20:43

+0

我還沒有嘗試所有的抽象/非抽象的組合,看看有什麼作品。但是我的代碼中有其他關係可以正常工作,所以我認爲這是一個抽象問題。無論如何,我已經向Grails團隊彙報過了。 – 2015-04-02 13:40:43

回答