次のクラス構造を考える:春データJPAでSpring Data JPAでMappedSuperClassのすべての子に汎用リポジトリを使用できますか?
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Animal {}
@Entity
public class Dog {}
@Entity
public class Cat {}
を、それがある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
です。
最適なソリューションは何ですか?
BTW - Animal
は、残りのクラスがpersistence.xml
にリストされているので、問題はありません。
'Animal'は' persistence.xml'の永続性ユニットのクラスとしてリストされるべきですか?あなたの提案が変更されました。新しい例外が発生しました: 'Unable to build EntityManagerFactory'。 –
@CFL_Jeff:典型的にはアノテーションのみに依存しているので、わかりません。 'Caused by'を含むどこかで完全なスタックトレースを公開できますか? –
他にもこのような問題があるようです。私はあなたが手元に問題を解決するのを手伝ってくれたと信じています。私は新しい問題に取り組むつもりです。ありがとう! –