2011-11-30 102 views
0

可以说我在我的Grails应用程序中有一个名为Tag的域类。Grails中的领域建模如何受领域属性影响?

class Tag { 
    String name // line number 1 
    User user // Line number 2 
     static constraints = { 
     } 
    static belongsTo = [User, Post] 
} 

我创建与belongsTo关键字的帮助UserTag之间的关系。但我对line number 2有疑问,这是User user。现在将此代码放置在我的Tag类中会以任何方式影响TagUser之间的关系,或者只关系belongsTo关键字中提供的内容。

还有什么工具可以可视化 Grails应用程序中任何类之间的关系?

回答

3

belongsTo与几个类通常是可疑的,因为它意味着实例将与其他几个域对象构成关系。根据我的经验,只有当你知道其中一个设置为null时,它才有用(但仍然可以改为TagUserTagPost来代替Tag类)。我建议你删除belongsTo(可能是Post)之一。

在您的PostUser类中,您可能有hasMany关系。这足以创建关系,并且不需要必须Tag中加上belongsTo。使用belongsTo的唯一优点是更新或删除UserPost将级联并保存Tags

如果您的标记用例是传统标记(例如,stackoverflow上的标记),则尝试创建多对多关系(一个用户具有多个标记,一个标记具有多个用户。您可以在多对多关系中使用belongsTo来指示哪个拥有的关系。阅读the documentation on many-to-many以了解这种关系是如何工作的。

关于你最后的问题,IntelliJ有一个集成的域类依赖关系可视化功能。

+0

所以你的意思是要尽可能地去除'belongsTo'? –

+1

不可以。如果你有一对多关系或一对一关系,并且对象之间具有很强的依赖关系(例如,*删除用户应该删除它的标记*),那么你应该**使用'belongsTo'。看看[GORM gotcha](http://blog.springsource.org/2010/07/02/gorm-gotchas-part-2/)了解'belongsTo'的含义和含义。 – Antoine

+0

感谢您的链接和答案:) –