diff --git a/backend/src/main/java/ru/micord/ervu_dashboard/dao/LessJoinsDao.java b/backend/src/main/java/ru/micord/ervu_dashboard/dao/LessJoinsDao.java index 7875eed8..b8cbf7fa 100644 --- a/backend/src/main/java/ru/micord/ervu_dashboard/dao/LessJoinsDao.java +++ b/backend/src/main/java/ru/micord/ervu_dashboard/dao/LessJoinsDao.java @@ -6,15 +6,14 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import org.jooq.Condition; -import org.jooq.Field; +import org.jooq.*; + import org.jooq.Record; import org.jooq.SelectConnectByStep; import org.jooq.SelectForUpdateStep; import org.jooq.SelectJoinStep; import org.jooq.SelectLimitStep; import org.jooq.SelectOnConditionStep; -import org.jooq.SelectSelectStep; import org.jooq.Table; import org.springframework.util.CollectionUtils; @@ -68,8 +67,9 @@ public class LessJoinsDao extends CustomCoalesceDao { )); List> fieldList = convertEntityColumnsToJooqFields(columns); + Field mainPkField = QueryUtils.toJooqField(mainNodePkColumns[0], this.getDsl().dialect(), true); SelectJoinStep selectStep = selectByJooqColumns(fieldList, fieldsEntityNames, - entitiesConditionsMap + entitiesConditionsMap, mainPkField ); SelectConnectByStep joinStep = buildWhereStep(selectStep, @@ -84,11 +84,11 @@ public class LessJoinsDao extends CustomCoalesceDao { } private SelectJoinStep selectByJooqColumns(List> fieldList, - Set fieldsEntityNames, Map> entitiesConditionsMap) { - SelectSelectStep select = uniqueResult - ? getDsl().selectDistinct(fieldList) - : getDsl().select(fieldList); - DefaultGraphNode mainNode = graph.getMainNode(); + Set fieldsEntityNames, Map> entitiesConditionsMap, Field mainPkField) { + SelectIntoStep select = uniqueResult + ? getDsl().select(fieldList).distinctOn(mainPkField) + : getDsl().select(fieldList); + DefaultGraphNode mainNode = graph.getMainNode(); SelectJoinStep selectJoinStep = select.from(getTableWithAlias(mainNode)); addJoins( selectJoinStep, graph.getMainNodeIndex(), -1, getMatrix(),