Java 如何在Join JPA criteria API中获取属性集合

Java 如何在Join JPA criteria API中获取属性集合,java,hibernate,jpa,criteria-api,Java,Hibernate,Jpa,Criteria Api,我正在尝试从listtribute获取属性策略\u类型\u id的列表,但我不知道如何执行此操作 我想出了一个低效的方法,那就是选择整个PolicyType集合,然后过滤它 Root<ArticleVersion> a = cq.from(ArticleVersion.class); Join<ArticleVersion, Article> join1 = a.join(ArticleVersion_.article, JoinType.

我正在尝试从
listtribute
获取属性
策略\u类型\u id
的列表,但我不知道如何执行此操作

我想出了一个低效的方法,那就是选择整个
PolicyType
集合,然后过滤它

        Root<ArticleVersion> a = cq.from(ArticleVersion.class);
        Join<ArticleVersion, Article> join1 = a.join(ArticleVersion_.article, JoinType.INNER);
        cq.where(getCondition(cb, join1));
        cq.multiselect(join1.get(Article_.article_id), join1.get(Article_.policyTypes), a);

经过长时间的搜索,我认为hibernate不支持原语类型的查询元组和对象列表(与LINQtoQuery相比,这有点悲哀)。我决定把我的问题分成几个小部分。首先,我选择
article\u id
articlevision
的元组。在那之后,我选择了一个
PolicyType
列表,其中也包含
article\u id
,然后返回union 2列表

在我写这篇文章的时候,我已经有了一个想法,我可以选择所有3个连接并以我想要的方式转换数据。但这实际上取决于许多方面,比如使用了多少连接或连接的类型,每个表中的数据增长速度()

@Entity
@Table(name = "PolicyType", schema = "SM_Request")
@Getter
@Setter
@NoArgsConstructor
public class PolicyType {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int policy_type_id;

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "PolicyTypeArticle", schema = "SM_Request", 
    joinColumns = @JoinColumn(name = "policy_type_id"), inverseJoinColumns = @JoinColumn(name = "article_id"))
    @JsonIgnore
    private List<Article> articles;
}