Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring data jpa JPA规范:从列表中选择至少有一个带有属性的参数的所有实体_Spring Data Jpa_Criteria - Fatal编程技术网

Spring data jpa JPA规范:从列表中选择至少有一个带有属性的参数的所有实体

Spring data jpa JPA规范:从列表中选择至少有一个带有属性的参数的所有实体,spring-data-jpa,criteria,Spring Data Jpa,Criteria,我有两个实体与许多关系 @Entity @Table public class TranslationUnit implements Serializable { @Id private Long id; @ManyToMany(mappedBy = "translationUnit", fetch = FetchType.EAGER) private Set<Category> categories = new HashSet<>(); } @Entit

我有两个实体与许多关系

@Entity
@Table
public class TranslationUnit implements Serializable {

@Id
private Long id;


@ManyToMany(mappedBy = "translationUnit", fetch = FetchType.EAGER)
    private Set<Category> categories = new HashSet<>();
}

@Entity
@Table
public class Category implements Serializable {
@ManyToMany
    @JoinTable(name = "category_translation_unit",
               joinColumns = @JoinColumn(name = "categories_id", referencedColumnName = "id"),
               inverseJoinColumns = @JoinColumn(name = "translation_units_id", referencedColumnName = "id"))
    private Set<TranslationUnit> translationUnits = new HashSet<>();
}
我需要能够指定类别名称列表(list),并选择至少有一个类别具有指定名称的TranslationUnits。 我有几个其他的过滤选项,应该一起使用,我成功地为它们建立了规范。但我一直坚持这一条

请帮忙

另外,我现有的一个规范如下所示:

Specification idSpec = (Specification) (r, q, cb) -> {

            List<Predicate> predicates = new ArrayList<>();

            if (!filterRequest.getTranslationUnitIds().isEmpty())
                predicates.add(r.get(TranslationUnit_.id).in(filterRequest.getTranslationUnitIds()));

            return cb.and(predicates.toArray(new Predicate[predicates.size()]));
        };
规范idSpec=(规范)(r、q、cb)->{
列表谓词=新的ArrayList();
如果(!filterRequest.GetTranslationInitiatids().isEmpty())
add(r.get(TranslationUnit.id).in(filterRequest.getTranslationInitiatids());
返回cb.and(predicates.toArray(新谓词[predicates.size()]);
};

你好。您可以使用中按类别名称列表筛选翻译单位。我相信,使用标准API时会是这样:

Root<TranslationUnit> itemsRoot = ...;
Join join = itemsRoot.join("categories");
List<Predicate> predicates = new ArrayList<>();
predicates(join.get("name").in(categoryNamesList));
Root itemsRoot=。。。;
Join-Join=itemsRoot.Join(“类别”);
列表谓词=新的ArrayList();
谓词(join.get(“name”).in(categoryNamesList));

您想要CriteriaAPI还是JPQL?你的其他规格看起来怎么样?嘿。我需要标准API。我将我的问题附加到现有的规范中。谢谢。因为我可以看到,您已经有了中的示例。因此,您要查找的内容类似于您已经使用的in谓词。或者您想做其他事情吗?在我的工作示例中,我选择了所有需要id的TranslationUnits。id只是一个长值。但类别是TranslationUnit中的一个集合,每个类别都有名称。所以,有很多,正如我所说的,我需要得到一个结果列表,其中至少有一个类别的名称来自提供的列表。我希望现在更清楚了。谢谢。
Root<TranslationUnit> itemsRoot = ...;
Join join = itemsRoot.join("categories");
List<Predicate> predicates = new ArrayList<>();
predicates(join.get("name").in(categoryNamesList));