我知道我可以在Grails中做Parent.childId
,但是我能做些什麼來爲hasMany中的每個孩子加載ids(代理)嗎?即,類似於Parent.childrenIds
的東西?只從grails中的hasMany中獲取ID?
在我的情況下,hasMany由joinTable映射。
我知道我可以在Grails中做Parent.childId
,但是我能做些什麼來爲hasMany中的每個孩子加載ids(代理)嗎?即,類似於Parent.childrenIds
的東西?只從grails中的hasMany中獲取ID?
在我的情況下,hasMany由joinTable映射。
考慮到一個joinTable
:
def getChildIds(parentId) {
Child.withSession { session ->
def sql = new Sql(session.connection())
sql.rows(
'select pc.child_id from parent_child pc where pc.parent_id = :parentId',
[parentId: parentId]
).collect{ it.child_id }
}
}
這適用於映射爲這樣一個joinTable
:
class Parent {
static mapping = {
childs joinTable: [name: 'parent_child', column: 'child_id', key: 'parent_id']
}
...
它不漂亮,但我相信這是對有關情況和需求的最佳途徑。
我打算接受這個答案,雖然我不打算使用它,因爲「不漂亮」 - 部分:-)感謝您的努力! – wwwclaes
你可以用projection來做到這一點。例如
def result = Child.createCriteria().list {
projections {
property('id')
}
eq ('parent', parent)
}
這將只返回子對象的ID。
感謝和很好的答案。但是我爲這個特定的關係使用了一個joinTable,所以我恐怕這不會立即解決它(parent在子域中不可用)。對不起,我沒有意識到它,直到你回答。 – wwwclaes
不盡如人意,但我確定'createCriteria()'解決方案是可能的。考慮如何將db表與列中具有父級id的子類映射出來,可能會導致提取不管,所以我不確定你可以獲得多少。 – tylerwal
實際上,我爲這種特殊的關係使用了一個joinTable--所以兒童ID可以在單獨的表中使用。如果Grails提供了Parent.childrenIds或類似的細節,可能會在窗簾後處理。 – wwwclaes