Данные Spring JPA: Как повторно использовать спецификацию Внутри другой спецификации с подтехнологичностью?JAVA

Программисты JAVA общаются здесь
Anonymous
Данные Spring JPA: Как повторно использовать спецификацию Внутри другой спецификации с подтехнологичностью?

Сообщение Anonymous »

Я борюсь с повторным использованием спецификации внутри другого. имеет список StudentGroupInfo .

[*] У меня уже есть спецификация , которые могут фильтровать группу различными условиями (соединения, группа, имея и т. Д.). Для групп, которые соответствуют этой спецификации .


Repository :

Код: Выделить всё

public interface StudentGroupInfoRepository extends JpaRepository {
long count(Specification specification);
}
Попытка повторно использовать спецификацию группы с помощью Subquery :

Код: Выделить всё

private Specification buildSpecificationByGroupSpecification(
Specification groupSpecification) {
return (root, query, builder) -> {
var subquery = query.subquery(Long.class);
var groupRoot = subquery.from(Group.class);

// how to apply the groupSpecification here?
var groupPredicate = groupSpecification.toPredicate(groupRoot, query /* ??? */, builder);

subquery.select(groupRoot.get(BaseEntity.Fields.id))
.where(groupPredicate);
return root.get(StudentGroupInfo.Fields.group).in(subquery);
};
}
Проблема :
Если Group Speciation проста, она работает.
Но если она содержит соединения, группа по или , Hibernate throws:

Код: Выделить всё

Caused by: org.hibernate.sql.ast.SqlTreeCreationException: Could not locate TableGroup - com.sdx.rootservice.model.group.Group(...)
Я предполагаю, что это происходит потому, что я передаю внешний запрос intourspecification.topredicate (...) , в то время как эта спецификация ожидает корня от основного запроса, а не от подвида. Существующая спецификация Внутри подвед в другой спецификации?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... icationf-w

Вернуться в «JAVA»