次のクラス構造があるとします。
@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
ますか?
エンティティごとのリポジトリを使用して、次のように使用できることを知っています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
ので、それは問題ではありません。