Tôi đang cố gắng hiểu làm thế nào để thừa kế hoạt động! Nhưng không thành công.Làm thế nào để kế thừa một mô hình từ siêu lớp trong playframework
Vì vậy, tôi có cha như vậy:
@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;
}
Và 2 lớp kế thừa:
@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;
}
}
Ngoài ra tôi có 2 bộ điều khiển cho các lớp kế thừa:
public class Subs and Sub1s extends CRUD {
}
Sau khi ứng dụng được khởi động , Tôi nhận được 2 bảng trong MySQL db cho các mô hình của tôi (Sub và Sub1) với cấu trúc như vậy: id bigint (20), tên varchar (255). Không có testVal nằm trong siêu lớp.
Và khi tôi cố gắng tạo ra đối tượng mới của Sub lớp trong giao diện CRUD Tôi nhận lỗi như vậy: lỗi Thực hiện xảy ra trong mẫu {module: crud} /app/views/tags/crud/form.html. Ngoại lệ được nâng lên là MissingPropertyException: Không có thuộc tính như vậy: testVal cho lớp: models.Sub.
Trong {module: crud} /app/views/tags/crud/form.html (khoảng dòng 64) # {crud.numberField tên: field.name, giá trị: (currentObject currentObject [field .name]: null) /}
- Tôi nên làm gì để tạo bảng MySQL cho mô hình kế thừa đúng cách và sửa lỗi?
- Có thể có một superController đơn cho một số lớp được kế thừa không?
lưu ý rằng bạn khai báo các trường của mình bằng công cụ sửa đổi truy cập mặc định. Thay đổi nó thành công cộng để chơi PropertiesEnhaner có thể thực hiện công việc của nó. – sdespolit
Cảm ơn bạn. Tôi đã thêm quyền truy cập công khai vào 'Dài id' và' int testVal'. Bây giờ tôi có thể thấy trường testVal trong giao diện CRUD và có thể lưu mô hình mà không có lỗi. Nhưng vẫn không có trường nào trong MySql, vì vậy tôi không thể lưu giá trị này. Tôi tin rằng tôi nên thêm một số chú thích vào giá trị này, nhưng cái gì? – gl0om
Cuối cùng, tôi đã tìm ra giải pháp: Tôi vừa thêm '@ MappedSuperclass' vào' SuperClass' và xóa 'Long id' khỏi nó. ** sdespolit **, cách chấp nhận đề xuất của bạn để thêm công cụ truy cập công khai? Tôi không thể tìm thấy bất kỳ nút chấp nhận nào. – gl0om