我正在使用带有SDN的数据库Neo4j的grails 2.4.3,我们不使用Grails插件,因此grails不支持Neo4j,如果我们在域包中创建域类,那么它会给我们一个错误。 所以我们在Services包中创建了我们的域。我的第一个问题是:
我们是对的,还是我们要做另一件事?
我的另一个问题是提供这个概念的验证。我们使用命令对象。所以现在我们需要一些独特的自定义验证。我知道我们可以使用Validator,但我们希望我们的逻辑只保留在Services中。那么我们可以创建这样的东西吗?
static constraints = {
username size: 5..15
password size: 5..15, blank: false
userEmail email: true
}
username email:true
userName name:unique
答案 0 :(得分:0)
我不明白你为何如此关注必须使用服务。创建使用@Validateable
注释并将其用作非GORM域类的服务似乎非常奇怪。如果它工作,很酷,但它有点像开车反向工作。你会到达那里(直到你烧掉传动装置),但是看到后视镜看起来是一个压力很大的驱动装置,看到整个时间都在逆转。
为什么不把这些类放在src / groovy下的合理包中并注释那些?您只需要在Config.groovy
中注册它们,例如
grails.validateable.classes = [
com.mycompany.myapp.User, com.mycompany.dto.Account]
您可以执行唯一性检查,但不能使用标准unique
约束。那与GORM联系在一起;它查看域类的表或后备存储,并运行数据存储区特定的唯一性查询,但这不适用于此处。但是你可以自己轻松地做同样的事情。使用自定义验证器:
email validator: { value, obj ->
// run a Neo4j query checking to see if value has
// been used, the equivalent of
// "select count(email) from person where email=?"
// and return false if the count is not zero
}