繁体   English   中英

如何在加入 JPA 标准 API 中获取属性集合

[英]How to get collection of property in Join JPA criteria API

我正在尝试从ListAttribute<Article, PolicyType>获取属性policy_type_id的列表,但我不知道该怎么做。

我想出了一个低效的方法是 select 整个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 会生成一个错误查询,例如select article1_.article_id as col_0_0_, . as col_1_0_, articlever0_.article_version_id as col_2_0_ select article1_.article_id as col_0_0_, . as col_1_0_, articlever0_.article_version_id as col_2_0_ 如您所见,有一个. 在 select 使查询中断(我相信 select 全部)

@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;
}

经过长时间的搜索,我认为 hibernate 不支持查询原始类型的元组和对象列表(这有点可悲,对比 LINQ 来查询)。 我决定将我的查询分解成更小的部分。 首先,我 select 元组article_idArticleVersion 之后,我 select 一个PolicyType列表,其中还包含article_id和 union 2 列表。

在我写这篇文章的时候,我有一个想法,我可以将 select 所有 3 个连接在一起并按照我想要的方式转换数据。 但这实际上取决于很多方面,例如您使用的连接数量或连接类型,每个表中的数据增长速度( JOIN 查询与多个查询

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM