我正在尝试理解在Play框架中继承是如何工作的!但目前还没有成功。
因此,我有这样一个超类:
@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;
}
还有两个继承类:
@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;
}
}
此外,我有两个用于继承类的控制器:
public class Subs and Sub1s extends CRUD {
}
应用程序启动后,我在MySQL数据库中收到了我的模型(Sub和Sub1)的两个表,其结构如下:id bigint(20),name varchar(255),没有超类中的testVal。
当我尝试在CRUD界面中创建Sub类的新对象时,我收到了这样的错误:在模板{module:crud}/app/views/tags/crud/form.html中发生执行错误。引发的异常是MissingPropertyException:models.Sub没有名为testVal的属性。 在{module:crud}/app/views/tags/crud/form.html(大约第64行)中 #{crud.numberField name:field.name, value:(currentObject ? currentObject[field.name] : null) /} 问题:
- 我应该怎么做才能正确为继承模型生成MySQL表并修复错误?
- 是否可以为多个继承类拥有一个单一的superController?
Long id
和int testVal
添加了公共访问权限。现在我可以在CRUD界面中看到testVal字段,并且可以保存模型而不出错。但是在MySql中仍然没有这样的字段,所以我无法保存此值。我相信我应该为此值添加某种注释,但是是什么呢? - gl0om@MappedSuperclass
添加到SuperClass
中并从中删除Long id
。sdespolit,如何接受您的建议添加公共访问修饰符?我找不到任何接受按钮。 - gl0om