Иерархия объектов выглядит следующим образом.
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
Может кто-нибудь сказать мне, как это сделать правильно.Заранее спасибо.Нужно только сделать в критерии построителя