Как отфильтровать родительский объект, у которого есть список детей, и у ребенка есть список внуков и сопоставление свойства внуков - PullRequest
0 голосов
/ 11 апреля 2019

Иерархия объектов выглядит следующим образом.

CoverCategory имеет несколько обложек, а обложка имеет несколько вспомогательных обложек.Пусть говорит, что в кодировке

CoverCategory

@Entity
public class CoverCategory {

@Id
private Long id;

@OneToMany
List<Cover> coverList;

}

Cover

@Entity
public class Cover {

 @Id
 private Long id;

 @ManyToOne
 private CoverCategory coverCategory;

 @OneToMany
 private List<SubCover> subCoverList;

}

Sub Cover

@Entity
public class SubCover {

       @Id
       private Long id;

       @ManyToOne
       private Cover cover;

       private String name;
}

Вот что я пытаюсь сделать, этовыбрать все категории обложек, у которых есть имя подкрышки "subcover1"

Я пытался написать код следующим образом

String name = "subcover1";
Session session = getCurrentSession();
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
CriteriaQuery<CoverCategory> creteriaQuery = criteriaBuilder.createQuery(CoverCategory.class);
Root<CoverCategory> root = creteriaQuery.from(CoverCategory.class);
creteriaQuery.select(root).where(criteriaBuilder.equal(root.get("coverList").get("subCoverList").get("name"),name));
Query<CoverCategory> query = session.createQuery(creteriaQuery);
List<CoverCategory> results = query.getResultList();

Но это дает мне следующее исключение

org.springframework.dao.InvalidDataAccessApiUsageException: Illegal attempt to dereference path source [null.coverList] of basic type; nested exception is java.lang.IllegalStateException: Illegal attempt to dereference path source [null.coverList] of basic type  

Может кто-нибудь сказать мне, как это сделать правильно.Заранее спасибо.Нужно только сделать в критерии построителя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...