我试图在条件构建器中创建一个函数,但是执行该命令后,我得到了以下提示。
.setMaximumCategoryLabelWidthRatio(float ratio)
}
例外:
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<RetrospectiveSearchVO> criteriaQuery = builder.createQuery(RetrospectiveSearchVO.class);
Root<Authorization> root = criteriaQuery.from(Authorization.class);
Join<Authorization, MedicalDiagProcedure> medicalDiagProcedureJoin = root.join(Authorization_.medicalDiagProcedures,JoinType.LEFT);
Join<MedicalDiagProcedure, MedicalDiagnosis> medicalDiagJoin = medicalDiagProcedureJoin.join(MedicalDiagProcedure_.medicalDiagnosis,JoinType.LEFT);
Join<MedicalDiagnosis, ReferenceData> medicalDiagRefDataJoin = medicalDiagJoin.join(MedicalDiagnosis_.diagnosis,JoinType.LEFT);
ArrayList<Predicate> conditions = new ArrayList<>();
conditions.add(builder.like(medicalDiagRefDataJoin.get(ReferenceData_.referenceTypeValue), dignosisValue));
Expression<String> functionStringAgg = builder.function( "string_agg", String.class,
medicalDiagRefDataJoin.<String>get("referenceTypeValue"),
builder.parameter(String.class, "delimiter"));
Expression<String> parentExpression = root.get(Authorization_.authorizationNbr);
Predicate parentPredicate = parentExpression.in(claimNbr);
conditions.add(builder.equal(medicalDiagJoin.get(MedicalDiagnosis_.diagType),"F"));
criteriaQuery.where(parentPredicate,builder.and(conditions.toArray(new Predicate[] {})));
criteriaQuery.multiselect(
root.get(Authorization_.authorizationNbr), functionStringAgg);
criteriaQuery.groupBy(root.get(Authorization_.authorizationNbr));
Query query = manager.createQuery(criteriaQuery);
/*Query query = manager.createNativeQuery("select authorizat0_.authorization_nbr as dignosisnbr, STRING_AGG(referenced3_.reference_value,',') as finaldiagnosis from claims.authorization authorizat0_ left outer join claims.medical_diag_procedure medicaldia1_ on " +
" authorizat0_.authorization_id=medicaldia1_.authorization_id left outer join claims.medical_diagnosis medicaldia2_ on " +
" medicaldia1_.medical_code_id=medicaldia2_.medical_code_id left outer join ref_data.reference_data_master referenced3_ on " +
" medicaldia2_.diagnosis_id=referenced3_.reference_data_id where authorizat0_.authorization_nbr in :authorizationNbr and medicaldia2_.diag_type='F' and referenced3_.reference_value like group by authorizat0_.authorization_nbr");
query.setParameter("authorizationNbr", claimNbr);
query.unwrap(SQLQuery.class)
.setResultTransformer( Transformers.aliasToBean( RetrospectiveSearchVO.class ));*/
List<RetrospectiveSearchVO> retrospectiveSearchList = query.getResultList();
return retrospectiveSearchList;
public class PGDialect extends PostgreSQL82Dialect {
public PGDialect() {
super();
registerFunction("string_agg", new SQLFunctionTemplate(StandardBasicTypes.STRING, "string_agg(?1, ', ')"));
}