给定以下类结构:
@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
,所以这不是问题。