die folgende Klassenstruktur Gegeben:Kann ich ein generisches Repository für alle untergeordneten Elemente einer MappedSuperClass mit Spring Data JPA verwenden?
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Animal {}
@Entity
public class Dog {}
@Entity
public class Cat {}
Mit Spring Data JPA, ist es möglich, ein Animal
zur Laufzeit, ohne zu wissen, welche Art von Animal
es ist ein allgemeines Animal
Repository zu verwenden, bestehen bleiben?
Ich weiß, ich kann es ein Repository-pro-Einheit mit und durch instanceof
wie folgt aus:
if (thisAnimal instanceof Dog)
dogRepository.save(thisAnimal);
else if (thisAnimal instanceof Cat)
catRepository.save(thisAnimal);
}
aber ich will nicht zu verwenden instanceof
der schlechten Praxis greifen.
Ich habe versucht, eine generische Repository wie folgt aus:
public interface AnimalRepository extends JpaRepository<Animal, Long> {}
Aber dies führt zu dieser Ausnahme: Not an managed type: class Animal
. Ich schätze, weil Animal
kein Entity
ist, ist es ein MappedSuperclass
.
Was ist die beste Lösung?
BTW - Animal
ist mit dem Rest meiner Klassen in persistence.xml
aufgeführt, so dass das nicht das Problem ist.
Sollte 'Animal' als Klasse in meiner Persistenzeinheit in' persistence.xml' aufgeführt sein? Ihre vorgeschlagene Änderung verursacht eine neue Ausnahme: "EntityManagerFactory kann nicht erstellt werden". –
@CFL_Jeff: Normalerweise vertraue ich nur auf Anmerkungen, also bin ich mir nicht sicher. Können Sie einen vollständigen Stack-Trace irgendwo veröffentlichen, einschließlich 'Caused by'? –
Es sieht so aus, als hätte ich noch andere Probleme. Ich glaube, Sie haben mir geholfen, das Problem zu lösen, und ich werde an den neuen Problemen arbeiten. Vielen Dank! –