2016-09-05 2 views
0

기본 클래스에서 파생 된 클래스로 필터링하는 방법이 있습니까?파생 클래스로 자바 스프링 저장소 필터

예를 들어 Animal.class가 있으며 AnimalRepository가 있습니다. 그것이 클래스를 파생 내가 미리하지 않는 동시에

Animal animalRepository.findByDerivedClass(Class clazz); 

: 내가 좋아하는 파생 클래스의 유형으로 동물, 그래서 뭔가를 찾고 싶어요. 그것은 고양이, 개, 또는 내가 아직 모를 새로운 것이 될 수 있습니다. 가능한가?

답변

1
예, 예를 들어 당신이 클래스의 유형에 따라 최대 절전 모드와 선택을 만들 수 있습니다

:

List<Animal> animal = (List<Animal>) getSession().createCriteria(Class clazz).list(); 
+0

나는 저장소가있는 솔루션을 원했지만 이것 역시 유망 해 보입니다. – Sarief

0

허용 대답이 저장소는 할 수 없다 (사용 기준에 나를 납이 함유 된, 그래서 저장소에 대한 사용자 정의 메소드를 작성했다 이는 기준 사용을 의미 함)

또한이 방법은 저장소에서 사용되는 경우 jpa 규칙에 따라 선언해야합니다.

public <T extends Animal> List<T> findByDerivedClass(Class<T> clazz) { 
    CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
    CriteriaQuery<T> cq = cb.createQuery(clazz); 
    Root<T> root = cq.from(clazz); // we pass clazz here again, because magic... 
    cq.select(root); 
    return entityManager.createQuery(cq).getResultList(); 
}