我有一个名为Issue
和实体称为UserIssue
. UserIssue
延伸Issue
.
@Inheritance(strategy = InheritanceType.JOINED)
@Entity(name = "ISSUE")
public class Issue extends VersionedSequenceIdEntity {
... all fields
}
@Entity(name = "USER_ISSUE")
public class UserIssue extends Issue {
...
@Enumerated(EnumType.STRING)
@Column(name = "CATEGORY", nullable = false)
private IssueCategory category;
...
}
我需要做例如像这样的东西:
Predicate predicate= root.get("category").in(IssueCategory.CATEGORY_1, IssueCategory.CATEGORY_2);
问题是 root 是实例Root<Issue>
但“类别”字段是在子类上定义的UserIssue
所以这行代码显然不起作用。
有没有办法构建一个谓词来为子类字段创建 where 条件?我只有一个实例Root<Issue>, CriteriaQuery and CriteriaBuilder
.
谢谢你,
卢卡斯
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Issue> issueQuery = cb.createQuery(Issue.class);
Root<Issue> issueRoot = issueQuery.from(Issue.class);
Subquery<UserIssue> subQuery = issueQuery.subquery(UserIssue.class);
Root<UserIssue> userIssueRoot = subQuery.from(UserIssue.class);
Predicate predicate= userIssueRoot.get("category")
.in(IssueCategory.CATEGORY_1, IssueCategory.CATEGORY_2);
subQuery.select(userIssueRoot).where(predicate);
issueQuery.select(issueRoot).where(issueRoot.get("id").in(subQuery));
em.createQuery(issueQuery).getResultList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)