Estoy intentando comprender cómo funciona la herencia en juego. Pero sin éxito todavía.Cómo heredar un modelo de la superclase en playframework
lo tanto, tengo tales superclase:
@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;
}
y 2 clases heredadas:
@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;
}
}
También tengo 2 controladores para las clases heredadas:
public class Subs and Sub1s extends CRUD {
}
después del inicio de la aplicación , Recibo 2 tablas en MySQL db para mis modelos (Sub y Sub1) con dicha estructura: id bigint (20), nombre varchar (255). Sin testVal que está en superclase.
Y cuando intento crear nuevo objeto de la clase Sub en la interfaz CRUD que recibo dicho error: error ejecución ocurrió en la plantilla {module: crud} /app/views/tags/crud/form.html. La excepción planteada fue MissingPropertyException: Sin dicha propiedad: testVal for class: models.Sub.
En {module: crud} /app/views/tags/crud/form.html (alrededor de la línea 64) # {crud.numberField nombre: field.name, valor:? (CurrentObject currentObject [Campo .name]: null) /}
- ¿Qué debo hacer para generar las tablas de MySQL para los modelos heredados correctamente y corregir el error?
- ¿Es posible tener un supercontrolador único para varias clases heredadas?
tenga en cuenta que declara sus campos con el modificador de acceso predeterminado. Cámbielo a público para que el juego PropertiesEnhaner pueda hacer su trabajo. – sdespolit
Gracias. Agregué acceso público a 'Long id' y' int testVal'. Ahora puedo ver el campo testVal en la interfaz CRUD y puedo guardar el modelo sin errores. Pero aún no existe ese campo en MySql, por lo que no puedo guardar este valor. Creo que debería agregar algún tipo de anotación a este valor, pero ¿qué? – gl0om
Finalmente, encontré la solución: acabo de agregar '@ MappedSuperclass' a' SuperClass' y eliminé 'Long id' de él. ** sdespolit **, ¿cómo aceptar su sugerencia de agregar un midificador de acceso público? No puedo encontrar ningún botón de aceptar. – gl0om