lax*_*xmi 3 grails spring spring-security
我在我的grails应用程序中使用Spring Security插件.我在自己生成的Physician类中扩展了Springs User类.现在,当我运行app时,我没有在数据库中获取医师表而是User类仅具有在Physician Domain中定义的所有属性.我需要为医生提供单独的表格.
当我尝试使用User.findAll()查找User表中的所有用户时,我的输出是,
[com.HospitalManagement.User:1,com.HospitalManagement.User:2,com.HospitalManagement.User:3,com.HospitalManagement.User:4,com.HospitalManagement.User:5,com.HospitalManagement.User:6,com .HospitalManagement.User:7,com.HospitalManagement.User:8,com.HospitalManagement.User:9]
但我期待用户名和其他医生属性值.
问题是什么?
域类是:
package com.HospitalManagement
class Physician extends User{
static constraints = {
}
String specilty;
String MobileNo;
String Physician_Address;
String clinicals;
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,GORM对具有继承的域类使用每个层次的表模型.父类中的所有字段和每个子类中的所有字段都将存储在单个表中.
如果要关闭此功能,可以使用tablePerHierarchy映射参数.将此参数设置为false会将父类字段放在公共父表中,并将每个子类的字段放在它们自己的表中.这可以使你的查询略少有效,因为查询将将加入,但如果继承树小,差别可以忽略不计.以下是您的域类的外观:
package com.HospitalManagement
class Physician extends User {
static constraints = {
}
String specilty;
String MobileNo;
String Physician_Address;
String clinicals;
static mapping = {
tablePerHierarchy false
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅Grails文档:
如果您希望每个子类拥有自己的表,其中包含父类的所有字段和子类中的所有字段,那么您可以将父类定义为"abstract",这样可以防止grails为它创建单独的表.Grails应该只为具体的域类创建表,而不是为抽象域类创建表.[ 来源 ]
您的用户类看起来像这样:
abstract class User {
String username
String password
//etc...
}
Run Code Online (Sandbox Code Playgroud)
这将正确构建表,但我不确定它可能对Spring Security产生什么影响.如果在使用User类抽象后看到任何Spring Security错误,我将回退到禁用每个层次的表并处理连接.