[英]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_id
和ArticleVersion
。 之后,我 select 一个PolicyType
列表,其中还包含article_id
和 union 2 列表。
在我写这篇文章的时候,我有一个想法,我可以将 select 所有 3 个连接在一起并按照我想要的方式转换数据。 但这实际上取决于很多方面,例如您使用的连接数量或连接类型,每个表中的数据增长速度( JOIN 查询与多个查询)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.