我有一个Grails项目。它的Domain Objects是从现有的WordPress数据库进行反向设计的。
我有一个名为WpPosts的类,它看起来像这样:
Date postDate
//[...] lots of stuff here which is not important
Long commentCount
static mapping = {
version false
//more blah blah
}
static hasOne = [postAuthor: WpUsers, postParent: WpPosts]
static hasMany = [childPosts: WpPosts]
static constraints = {
postParent nullable: true
//even more blah blah blah
}
因此,帖子可以将帖子作为孩子。但是帖子不一定要有父母。 在数据库中,如果未定义父ID,则为0。 如果我现在尝试获取我的帖子grails trys来获取id为0的Parent。这不存在。所以我得到了一个
Method threw 'org.hibernate.ObjectNotFoundException' exception.
我当然可以将父级定义为长值。但我会失去很多安慰。所以这不是我想要的解决方案。
提前感谢您的回答!
编辑:我现在的问题是,如果我做错了什么。或者我可以定义0是我的空对象吗?答案 0 :(得分:0)
处理此问题的一种方法是拦截getPostParent方法调用并实现自己的加载逻辑。例如:
class WpPosts {
Date postDate
//[...] lots of stuff here which is not important
Long commentCount
static mapping = {
version false
//more blah blah
}
static hasOne = [postAuthor: WpUsers, postParent: WpPosts]
static hasMany = [childPosts: WpPosts]
static constraints = {
postParent nullable: true
//even more blah blah blah
}
WpPosts getPostParent(Long id) {
if (id == 0) return null
return WpPosts.get(id)
}
}
我没试过这个,但它可以帮助你克服你的问题。