我想了解继承在工作中如何工作!但尚未成功。如何从玩类框架中的超类继承模型
所以,我有这样的超:
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
abstract class SuperClass extends Model {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "SEQ_TABLE")
@TableGenerator(name = "SEQ_TABLE")
Long id;
int testVal;
}
和2继承的类:
@Entity
public class Sub extends SuperClass {
String name;
@Override
public String toString() {
return name;
}
}
@Entity
public class Sub1 extends SuperClass {
String name;
@Override
public String toString() {
return name;
}
}
而且我有2个控制器,用于继承类:
public class Subs and Sub1s extends CRUD {
}
应用程序启动后,我在MySQL数据库中为我的模型(Sub和Sub1)接收了2个表,结构如下:id bigint(20),name varchar(255)。没有testVal这是超类。
当我尝试创建CRUD接口子类的新对象,我收到这样的错误:/app/views/tags/crud/form.html:在模板{CRUD模块}发生 执行错误。引发的异常是MissingPropertyException:没有这样的属性:testVal类:models.Sub。
在{模块:污物} /app/views/tags/crud/form.html(围绕线64) #{crud.numberField名:field.name,值:(currentObject currentObject [字段.name]:null)/}
- 我该如何正确生成继承模型的MySQL表并修复错误?
- 是否有可能有一个单一的superController几个继承类?
请注意,您使用默认访问修饰符声明您的字段。将其更改为公开,以便播放PropertiesEnhaner可以完成其工作。 – sdespolit
谢谢。我已经添加了对“Long id”和“int testVal”的公共访问权限。现在我可以在CRUD界面看到testVal字段,并且可以保存模型没有错误。但MySql中仍然没有这样的字段,所以我不能保存这个值。我相信我应该为这个值添加一些注释,但是什么? – gl0om
最后,我找到了解决方案:我刚刚将'@ MappedSuperclass'添加到'SuperClass'并从中删除了'Long id'。 ** sdespolit **,如何接受您的建议添加公共访问权限中介?我找不到任何接受按钮。 – gl0om