Tôi đang cố gắng tìm ra nếu JPA có thể tồn tại một bộ sưu tập trừu tượng với các triển khai cụ thể.Làm thế nào để ánh xạ một bộ sưu tập trừu tượng với jpa?
Cho đến nay mã của tôi trông như thế này:
@Entity
public class Report extends Model {
@OneToMany(mappedBy = "report",fetch=FetchType.EAGER)
public Set<Item> items;
}
@MappedSuperclass
public abstract class OpsItem extends Model {
@ManyToOne
public RetailOpsBranch report;
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class AItem extends OpsItem {
...
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class BItem extends OpsItem {
...
}
Nhưng tôi giữ ngại về lỗi lập bản đồ dưới đây và tôi thực sự không biết nếu điều này là khả thi?
JPA error
A JPA error occurred (Unable to build EntityManagerFactory): Use of @OneToMany or
@ManyToMany targeting an unmapped class: models.Report.items[models.OpsItem]
CẬP NHẬT
Tôi không nghĩ rằng vấn đề là với lớp trừu tượng nhưng các @MappedSuperClass chú thích. Có vẻ như jpa không thích ánh xạ mối quan hệ một đến nhiều với một số @MappedSuperClass. Nếu tôi thay đổi lớp trừu tượng thành một lớp cụ thể, tôi có cùng lỗi.
Nếu sau đó tôi thay đổi thành @Entity chú thích này dường như hoạt động với cả lớp trừu tượng và bê tông.
Điều này có vẻ hơi lạ khi ánh xạ một lớp trừu tượng với @Entity. Tôi có thiếu gì không?
SOLUTION
Managed để con nó ra với sự giúp đỡ từ rhinds. Hai điểm cần lưu ý:
1) lớp trừu tượng cần phải được chú thích với @Chính xác và chiến lược kế thừa của bảng trên mỗi lớp để các lớp con có bảng riêng.
2) Tạo ID danh tính sẽ không hoạt động trong trường hợp này và tôi phải sử dụng loại tạo bảng.
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class OpsItem extends GenericModel {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public Long id;
public String branchCode;
@ManyToOne
public Report report;
}
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class AItem extends OpsItem {
...
}
Tôi đã thử nhưng vẫn gặp lỗi. Có vẻ như bị nhầm lẫn khi nói đến ánh xạ tập hợp các mục.Tôi cũng đã cố gắng xác định thực thể được ánh xạ nhưng vẫn nhận được thông báo lỗi tương tự. – emt14
xem câu trả lời cập nhật của tôi – rhinds
Humm, vì vậy về cơ bản có mối quan hệ một đến nhiều trên một lớp trừu tượng và một số triển khai cụ thể với bảng riêng của họ là không thể? – emt14