【发布时间】:2011-12-02 19:57:02
【问题描述】:
我正在设计一个系统,在该系统中,用户之间的帖子/讨论可以升级为门票。在一个特定的地方,我试图创建一对一的可选关系,但遇到了某些问题。下面给出了聚光灯下实体的精简版本。
规则:
- 如果需要,帖子可以变成票证。 (可选)
- 工单必须有一个帖子。 (强制)
Post.groovy
class Post {
String title
String description
String postedBy
Ticket ticket
static hasMany = [comments: Comment]
static constraints = {
title(blank:false)
description(blank:false)
postedBy(blank:false)
ticket (nullable:true,unique:true)
}
}
Ticket.groovy
class Ticket {
String title
String description
String postedBy
Post post
static hasMany = [responses: Response]
static constraints = {
title(blank:false)
description(blank:false)
postedBy(blank:false)
post (nullable:false,unique:true)
}
}
这在某种程度上有效。我可以:
- 创建一个帖子,保留票证属性为空 如果帖子升级为票证
- 我可以将 Post 的票证属性显式设置为指向父票证。
但是,此映射并未在域级别强制执行。它为 Ticket1 指向 Post1,但 Post1 指向 Ticket2 的情况留出了空间。
我尝试在 Ticket 类中使用 static hasOne = [post: Post],但后来了解到它要求在 Post 类中存在 static belongsTo = [ticket: Ticket],这成为强制性的一对一的关系,这不是我想要的。
有没有办法在这种情况下实现这种一对一的可选映射?任何指针都会很有帮助。
【问题讨论】:
-
请关闭问题,如果它的回答令您满意。谢谢! :-)
-
它不起作用。我认为无法创建 1-1。我可能应该将其关闭为无法回答?
标签: grails grails-orm domain-model