Với cấu trúc lớp sau đây:Tôi có thể sử dụng Kho lưu trữ chung cho tất cả trẻ em của một MappedSuperClass với JPA dữ liệu Spring không?
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Animal {}
@Entity
public class Dog {}
@Entity
public class Cat {}
Với liệu mùa xuân JPA, là nó có thể sử dụng một generic Animal
Repository để tồn tại một Animal
khi chạy mà không biết đó loại Animal
nó là gì?
Tôi biết tôi có thể làm điều đó bằng cách sử dụng thực thể Repository mỗi và bằng cách sử dụng instanceof
như thế này:
if (thisAnimal instanceof Dog)
dogRepository.save(thisAnimal);
else if (thisAnimal instanceof Cat)
catRepository.save(thisAnimal);
}
nhưng tôi không muốn dùng đến việc thực hành xấu của việc sử dụng instanceof
.
Tôi đã cố gắng sử dụng một Repository chung như thế này:
public interface AnimalRepository extends JpaRepository<Animal, Long> {}
Nhưng kết quả này trong ngoại lệ này: Not an managed type: class Animal
. Tôi đoán vì Animal
không phải là Entity
, đó là MappedSuperclass
.
Giải pháp tốt nhất là gì?
BTW - Animal
được liệt kê với phần còn lại của các lớp học của tôi trong persistence.xml
, do đó, đó không phải là vấn đề.
Liệu 'Động vật' có được liệt kê là một lớp trong đơn vị kiên trì của tôi trong' persistence.xml' không? Đề xuất của bạn đã thay đổi đang gây ra ngoại lệ mới: 'Không thể tạo EntityManagerFactory'. –
@CFL_Jeff: thông thường tôi chỉ dựa vào chú thích, vì vậy tôi không chắc chắn. Bạn có thể xuất bản dấu vết ngăn xếp đầy đủ ở đâu đó, bao gồm 'Gây ra bởi' không? –
Dường như tôi có vấn đề khác ngoài vấn đề này. Tôi tin rằng bạn đã giúp tôi giải quyết vấn đề trên tay, và tôi sẽ làm việc về những vấn đề mới. Cảm ơn! –