[英]Spring Data JPA : Creating an abstract repository
給定以下類別:
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name="animalType",discriminatorType=DiscriminatorType.STRING)
@QueryExclude
public abstract class Animal {}
@Entity
@DiscriminatorValue("dog")
public class Dog {}
@Entity
@DiscriminatorValue("cat")
public class Cat {}
是否可以通過某種方式為Animal
配置JPA存儲庫?
我試過了
public interface AnimalRepository extends JpaRepository<Animal,Long>
但是,此操作失敗:
java.lang.IllegalArgumentException:非托管類型:Animal
有沒有一種配置方式?
我希望能夠執行以下任務:
@Autowired
private AnimalRepository repository;
public void doSomething()
{
Animal animal = repository.findById(123);
animal.speak();
}
我有類似的錯誤。 我通過將實體類的映射添加到我的persistence.xml文件中來解決了這一問題。
因此,也許在您的persistence.xml中添加以下內容:
<persistence-unit>
...
<class>yourpackage.Animal</class>
...
</persistence-unit>
我遇到了這個確切的問題,我找到了解決方案:您需要使用@MappedSuperclass
或 @Inheritance
,而不能同時使用。 像這樣注釋Animal
類:
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Animal {}
基礎數據庫方案將保持不變,現在您的通用AnimalRepository
應該可以使用了。 持久性提供程序將進行自省,並找出用於實際子類型的表。
您需要在Webconfig的@EntityScan中包含Animal-class
Tente desta maneira:
public interface RepositorioAnimal extends JpaRepository<Animal, Long> {
}
@Repository
@Transactional( readOnly = true )
public class RepositorioAnimal extends QueryDslJpaRepository<Animal, Long> implements RepositorioAnimal {
@Inject
public RepositorioAnimal( EntityManager em ) {
super( new JpaMetamodelEntityInformation<Animal, Long>( Animal.class, em.getMetamodel() ), em );
}
}
public interface ServicoAnimal {
void salvar( Animal entidade );
void remover( Animal entidade );
Animal carregar( Long id );
}
@Service
@Component
public class ServicoAnimalImpl implements ServicoAnimal {
@Inject
private RepositorioAnimal animal;
@Override
public void salvar( Animal entidade ) {
animal.save( entidade );
}
@Override
public void remover( Animal entidade ) {
animal.delete( entidade );
}
@Override
public Animal carregar( Long id ) {
return animal.findOne( id );
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.