好吧,首先让我们纠正它,你可以使用inheritance
在这种情况下。你只需要改变约定has a
与 的关系is a
关系。
需要注意的几个因素:
1. Grails 遵循约定优于配置的原则。
2.您可以使用GORM,它包装持久层并在Hibernate的帮助下为底层持久层创建对象映射。
根据您的功能要求:-
如果您不想拥有User
作为坚持的一部分,你可以有一个abstract
class User
它可以保存用户的共同属性,包括openId
属性。它必须被放置在src\groovy
按照约定的目录(由于基类是抽象的,依赖注入将被拒绝)
同样适用于Property
。抽象的Property
班级在src\groovy
.
现在谈到商业模式,extend
每个具体实体(domain
类)从abstract
parent.
概括:-
用户.groovy:-
abstract class User{
String name
String emailId
OpenID openId
}
属性.groovy:-
abstract class Property{
String propertyName
}
Librariran.groovy:-
class Librarian extends User{
//Attributes specific to Librariran
static constraints = {
}
static mapping = {
}
}
书.groovy:-
class Book extends Property{
//Attributes specific to Book
static constraints = {
}
static mapping = {
}
}
等等等等。根据 Grails 约定,grails-app/domain 下的 Groovy 对象被视为具体实体。您显然可以找到更多信息here。如果遇到场景也可以使用组合,其实我已经提到过User
having OpenId
.
注意:- 这是最新版本 Grails (> 2.x) 的上下文