У меня есть книга класса со списком авторов:поиск Spring JPA criteriaBuilder в списке
@Entity
@Table(name = "book")
public class Book extends Content {
@ManyToMany(fetch = FetchType.LAZY)
private List<Author> authors;
...}
Теперь это мой BookSpecifications
класс:
public static Specification<Book> authorIdIs(Long authorId) {
return new Specification<Book>() {
@Override
public Predicate toPredicate(Root<Book> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
return cb.isTrue(root.get("authors").get("id").in(authorId));
}
};
}
Как проверить данный authorId
является в списке?
Ошибка:
java.lang.IllegalStateException: Illegal attempt to dereference path source [null.authors] of basic type
at org.hibernate.jpa.criteria.path.AbstractPathImpl.illegalDereference(AbstractPathImpl.java:98) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final]
at org.hibernate.jpa.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:191) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final]
at com.tarameshgroup.derakht.service.specs.BookSpecifications$3.toPredicate(BookSpecifications.java:40) ~[classes/:na]
at org.springframework.data.jpa.domain.Specifications$ComposedSpecification.toPredicate(Specifications.java:189) ~[spring-data-jpa-1.9.2.RELEASE.jar:na]
Я не говорю, что я помогу, но вы можете укажите, как вы его используете? Это новая конструкция для меня, поэтому я не знаю, откуда приходит «Спецификация» и как ее выполнить ... Мне кажется, что корневой файл не инициализирован правильно, см. «Null» в '[null .authors] ', но это не реальный NPE ... – Betlista
Хорошо, я нашел некоторый учебник - https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and- querydsl/... – Betlista
@Betlista Моя проблема заключается в поиске в списке, – CVV