我有一个域类用户定义为
class User extends SecUser{
String fullName
String address
String city
String country
String role
String email
String schoolName
String gradeLevel
static constraints = {
fullName(nullable:true)
username(blank:false, unique:true)
password(size:6..20, blank:false)
//passwordRepeat(validator:)
email(email:true, nullable:true, unique:true)
address(nullable:true)
city(nullable:true)
country(nullable:true)
phone(nullable:true) //10 digit phone number, no spaces
role(blank:false, inList:['Teacher', 'Donor', 'Both'])
schoolName(nullable:true)
gradeLevel(nullable:true, inList:['K', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', 'College'])
}
}
SecUser是一个通过执行spring security grails插件的快速入门脚本实现的类。它定义为
class SecUser {
transient springSecurityService
String username
String password
boolean enabled
boolean accountExpired
boolean accountLocked
boolean passwordExpired
static constraints = {
username blank: false, unique: true
password blank: false
}
}
通常,我认为生成的数据库表是一个USER表,上面列出的字段为列,我可以使用UserController方法来实现CRUD。问题是,永远不会创建用户表,而是在上面的字段中实例化SEC_USER表。
我的问题与创建新用户和填充相关字段有关。由于USER表不存在,我无法从User域对象插入记录。
另一方面,我可以在SEC_USER表中插入记录,但这些字段仅限于SecUser域类中定义的字段。如果我尝试通过新的SecUser实例在User中的特定列中插入一个项目,我会得到一个未定义属性的错误消息。
这有点令人沮丧,因为为了完成用户注册过程,我需要访问,插入和更新相关字段,但如何在没有访问权限的情况下这样做?
答案 0 :(得分:1)
我相信你要找的是每个子类映射的表,而不是每个层次结构的默认表。
默认的每层次表可能会使处理数据库变得困难 其他缺点是列不能在db级别应用“Not Null”约束。
grails在5.5.2.3继承策略
中对此有一点了解如果将以下内容添加到域类中,则每个子类将获得一个表
static mapping = {
tablePerHierarchy false
}