我有一个拥有另一个实体列表的实体。让我们说实体A有一个实体列表B.实体B有一个名为" name"的属性。我有一个过滤器,它是一个String列表。这些字符串是实体B(可能)拥有的名称。
我想找到"实体A"的所有项目。其中过滤器中的所有元素都在A的实体B列表中通过其名称表示。
我尝试了类似我附加的代码,但问题是我首先需要加入实体B的列表,然后将所有给定的名称(我的过滤器)与连接项的名称进行比较。
我也试过.in(...)但是这不起作用,因为我需要AND过滤器中的所有名称,而不是OR。
public static Specification<PortalEntry> tags(List<String> tags) {
return (Specification<PortalEntry>) (root, query, cb) -> {
return tags.stream().map(tagName ->
cb.isMember(tagName,
root.joinList(PortalEntry_.tags.getName()))
).reduce(cb::and).get();
};
}
--> org.springframework.web.util.NestedServletException: Request processing failed;
nested exception is org.springframework.dao.InvalidDataAccessApiUsageException:
unknown collection expression type [org.hibernate.query.criteria.internal.path.
ListAttributeJoin]; nested exception is java.lang.IllegalArgumentException:
unknown collection expression type [org.hibernate.query.criteria.internal.path.
ListAttributeJoin]