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