带IN子句的JPA标准生成器
I具有“CollectionTable”报表的实体报表用户: @实体 课堂报告{ @纵队 私有短用户标识 @列(name=“reportUserId”) @ElementCollection(fetch=FetchType.EAGER) @CollectionTable(name=“ReportUser”,joinColumns={@JoinColumn(name=“reportId”,referencedColumnName=“reportId”)}) private Set reportUsers=new HashSet() } 我需要使用CriterIQuery编写以下SQL(基本上,我需要所有由用户1111创建的报告或用户ID 1111位于该集合表中的报告): 在r.reportId=ru.reportId上选择*from Report r join ReportUser ru,其中r.userId=1111或ru.reportUserId=1111 你知道怎么做吗 谢谢你,并致以最良好的问候带IN子句的JPA标准生成器,jpa,criteriaquery,Jpa,Criteriaquery,I具有“CollectionTable”报表的实体报表用户: @实体 课堂报告{ @纵队 私有短用户标识 @列(name=“reportUserId”) @ElementCollection(fetch=FetchType.EAGER) @CollectionTable(name=“ReportUser”,joinColumns={@JoinColumn(name=“reportId”,referencedColumnName=“reportId”)}) private Set reportUs
Dalibor好的,我找到了一个解决方案:
CriteriaBuilder cb = persistence.getCriteriaBuilder();
CriteriaQuery<Report> query = cb.createQuery(Report.class);
Root<Report> root = query.from(Report.class);
Predicate userCreated = cb.equal(root.get(Report_.rowInfo).get(RowInfo_.userCreated), getUserId());
Predicate reportUser = cb.isMember(getUserId(), root.get(Report_.reportUsers));
query.where(cb.or(userCreated, reportUser));
return persistence.getCriteriaResults(query);
CriteriaBuilder cb=persistence.getCriteriaBuilder();
CriteriaQuery=cb.createQuery(Report.class);
Root=query.from(Report.class);
谓词userCreated=cb.equal(root.get(Report_u.rowInfo).get(rowInfo_u.userCreated),getUserId());
谓词reportUser=cb.isMember(getUserId(),root.get(Report.reportUsers));
其中(cb.or(userCreated,reportUser));
返回persistence.getCriteriaResults(查询);