gl0*_*0om 6 java jpa superclass playframework
我试图了解继承如何发挥作用!但尚未成功.
所以,我有这样的超类:
@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;
}
Run Code Online (Sandbox Code Playgroud)
和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;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有2个用于继承类的控制器:
public class Subs and Sub1s extends CRUD {
}
Run Code Online (Sandbox Code Playgroud)
应用程序启动后,我在MySQL数据库中为我的模型(Sub和Sub1)收到了2个表,其结构如下:id bigint(20),name varchar(255).没有在超类中的testVal.
当我尝试在CRUD界面中创建Sub类的新对象时,我收到了这样的错误:模板中出现 执行错误{module:crud} /app/views/tags/crud/form.html.引发的异常是MissingPropertyException:没有这样的属性:testVal for class:models.Sub.
在{module:crud} /app/views/tags/crud/form.html(64行左右) #{crud.numberField name:field.name,value:(currentObject?currentObject [field.name]:null)/}
好吧,多亏了sdespolit,我做了一些实验。这是我得到的:
超类:
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class SuperClass extends Model {
}
Run Code Online (Sandbox Code Playgroud)
继承类:
@Entity
public class Sub extends SuperClass {
}
Run Code Online (Sandbox Code Playgroud)
“超级控制器”我是这样制作的:
@With({Secure.class, SuperController.class})
@CRUD.For(Sub.class)
public class Subs extends CRUD {
}
@With({Secure.class, SuperController.class})
@CRUD.For(Sub1.class)
public class Sub1s extends CRUD {
}
Run Code Online (Sandbox Code Playgroud)
@CRUD.For(Sub.class)用于告诉拦截器应该使用哪个类
public class SuperController extends Controller {
@After/Before/Whatever
public static void doSomething() {
String actionMethod = request.actionMethod;
Class<? extends play.db.Model> model = getControllerAnnotation(CRUD.For.class).value();
List<String> allowedActions = new ArrayList<String>();
allowedActions.add("show");
allowedActions.add("list");
allowedActions.add("blank");
if (allowedActions.contains(actionMethod)) {
List<SuperClass> list = play.db.jpa.JPQL.instance.find(model.getSimpleName()).fetch();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定doSomething()方法是否真的很好并且是 Java 风格/Play! 风格。但这对我有用。请告诉我是否可以以更原生的方式捕获模型的类。
| 归档时间: |
|
| 查看次数: |
3225 次 |
| 最近记录: |