我有一個簡單的雙向一對多映射,如下所示,其中擁有指定的默認排序順序。但是,排序順序似乎沒有得到應用?我正在使用Grails v2.0.1(我現在已經用v1.3.7複製了這個例子)。Grails:一對多關係無法正常工作的排序順序
package playground
class User {
String name
static hasMany = [ posts : Post ]
static mapping = {
posts sort:'position'
}
}
和
package playground
class Post {
int position = 1
String message
static belongsTo = [ user : User ]
}
這是我使用行使它集成測試代碼...
def User user = new User(name:'bob')
user.addToPosts(new Post(position:2, message:'two'))
user.addToPosts(new Post(position:3, message:'three'))
user.addToPosts(new Post(position:1, message:'one'))
assertTrue user.validate()
assertFalse user.hasErrors()
assertNotNull user.save()
for (post in user.posts) {
log.debug "Post message> ${post.message}"
}
請把我從我的痛苦,這大概是明顯的東西但我看不到它!謝謝。
這種排序只適用於從數據庫中拉出時的情況。也許嘗試user.refresh()在你的for循環之前,看看這是真的嗎?這不是一個修復,但它可能解釋不同的順序。 – Igor 2012-03-26 17:44:39
這或取得一個新的參考將其與User.findByName(「鮑勃」)來強制往返,或許不應該需要,但是可以添加一個沖洗:真正的節省以及 – 2012-03-26 17:46:52
有趣。 flush:true不起作用,但用戶。刷新()做了。奇怪的是,如果你從數據庫中調用用戶(def User UserUser = User.get(user.id);)然後遍歷帖子它仍然不按排序順序 - 可能是因爲它已經獲得從緩存中(儘管添加flush:true在那裏也不起作用)。這不是我用集成測試看到的第一個奇怪現象......令人擔憂。 – ndtreviv 2012-03-27 12:07:13