Учитывая следующую структуру класса:
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Animal {}
@Entity
public class Dog {}
@Entity
public class Cat {}
Можно ли с помощью Spring Data JPA использовать общий репозиторий Animal
для сохранения Animal
во время выполнения, не зная, какой это тип Animal
?
Я знаю, что могу сделать это, используя Repository-per-entity и используя instanceof
следующим образом:
if (thisAnimal instanceof Dog)
dogRepository.save(thisAnimal);
else if (thisAnimal instanceof Cat)
catRepository.save(thisAnimal);
}
но я не хочу прибегать к плохой практике использования instanceof
.
Я пробовал использовать общий репозиторий следующим образом:
public interface AnimalRepository extends JpaRepository<Animal, Long> {}
Но это приводит к этому исключению: Not an managed type: class Animal
. Я предполагаю, потому что Animal
это не Entity
, а MappedSuperclass
.
Какое лучшее решение?
Кстати, Animal
указан вместе с остальными моими классами в persistence.xml
, так что это не проблема.