Мне нужна помощь в создании предиката для использования с данными Spring и querydsl. Я в процессе преобразования Daos в репозитории. И я столкнулся с тем, у которого есть динамический запрос. Я могу создать предикат из списка, но я теряюсь в том, как создать динамический предикат с карты. Вот код из DaoImpl, что я конвертирование из:Создать предикат querydsl с карты
public Set<String> getDocumentsByDocumentAssociation(Map.Entry<String,String>[] associations) {
String queryStr = "SELECT da FROM DocumentExternalAssocEntity as da WHERE";
StringBuilder sb = new StringBuilder(queryStr);
//loop through inputs. for first loop, skip appending the OR statements. Append OR for all others
for (int i = 0; i < associations.length; i++){
if (i > 0) {
sb.append(" OR");
}
String whereString = " (da.associationtype = :docAssocType" + i + " AND da.associationvalue = :docAssocValue" + i + ")";
sb.append(whereString);
}
//query when previous loop is done appending
final Query query = em.createQuery(sb.toString());
for(int i = 0; i < associations.length; i++) {
query.setParameter("docAssocType" + i, associations[i].getKey());
query.setParameter("docAssocValue" + i, associations[i].getValue());
}
А вот соответствующий сгенерированный класс:
private static final long serialVersionUID = 1971644089L;
public static final QDocumentExternalAssocEntity documentExternalAssocEntity = new QDocumentExternalAssocEntity("documentExternalAssocEntity");
public final StringPath associationtype = createString("associationtype");
public final StringPath associationvalue = createString("associationvalue");
Спасибо, и дайте мне знать, если вам нужна дополнительная информация
для агрегации вы также можете использовать 'BooleanBuilder'. –