Biorąc pod uwagę następujące klasy strukturę:Czy mogę użyć ogólnego repozytorium dla wszystkich dzieci z klasy MappedSuperClass z wiosennym JPA danych?
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Animal {}
@Entity
public class Dog {}
@Entity
public class Cat {}
Z Wiosna Danych WZP, możliwe jest użycie rodzajowe Animal
repozytorium utrzymują się Animal
w czasie wykonywania, nie wiedząc, jaki rodzaj Animal
to jest?
wiem, że mogę to zrobić za pomocą jednostki Repository-per-a za pomocą instanceof
takiego:
if (thisAnimal instanceof Dog)
dogRepository.save(thisAnimal);
else if (thisAnimal instanceof Cat)
catRepository.save(thisAnimal);
}
ale nie chcę uciekać się do złych praktyk korzystania instanceof
.
Próbowałem przy użyciu rodzajowe repozytorium tak:
public interface AnimalRepository extends JpaRepository<Animal, Long> {}
Ale powoduje to ten wyjątek: Not an managed type: class Animal
. Zgaduję, ponieważ Animal
nie jest Entity
, to jest MappedSuperclass
.
Jakie jest najlepsze rozwiązanie?
BTW - Animal
jest wymieniony wraz z resztą poza zajęciami w persistence.xml
, więc to nie problem.
Czy "Zwierzę" powinno być wymienione jako klasa w mojej jednostce trwałości w 'persistence.xml'? Twoja sugerowana zmiana powoduje nowy wyjątek: "Nie można zbudować EntityManagerFactory". –
@CFL_Jeff: zazwyczaj polegam tylko na adnotacjach, więc nie jestem pewien. Czy możesz gdzieś opublikować pełny stos, w tym 'Caused by'? –
Wygląda na to, że oprócz tego mam inne problemy. Uważam, że pomogłeś mi rozwiązać problem, a ja będę pracował nad nowymi problemami. Dzięki! –