Given the following class structure:
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Animal {}
@Entity
public class Dog {}
@Entity
public class Cat {}
With Spring Data JPA, is it possible to use a generic Animal Repository to persist an Animal at runtime without knowing which kind of Animal it is?
I know I can do it using a Repository-per-entity and by using instanceof like this:
if (thisAnimal instanceof Dog)
dogRepository.save(thisAnimal);
else if (thisAnimal instanceof Cat)
catRepository.save(thisAnimal);
}
but I don't want to resort to the bad practice of using instanceof.
I've tried using a generic Repository like this:
public interface AnimalRepository extends JpaRepository<Animal, Long> {}
But this results in this Exception: Not an managed type: class Animal. I'm guessing because Animal is not an Entity, it's a MappedSuperclass.
What's the best solution?
BTW - Animal is listed with the rest off my classes in persistence.xml, so that's not the problem.