Jooq Multiset — SQL показывает синтаксическую ошибку слова multiset thorwing — Postgres

Я использую Jooq версии 3.16.6 с Java 11 и Spring Boot 2.6.6 и (PostgreSQL) 14.1.

Проблема, с которой я сталкиваюсь, связана с мультинабором, запрос без мультинабора с использованием старого метода соединения работает нормально. Однако при использовании мультинабора и изучении sql я вижу слово мультинабор на самом деле в запросе sql, поэтому он вызывает синтаксическую ошибку.

var result = 
dslContext.select(USERS.FIRST_NAME,USER_LEVELS.USER_LEVEL_NAME)
        .from(USERS)
        .join(USER_LEVELS)
    .on(USERS.USER_LEVEL_ID.eq(USER_LEVELS.USER_LEVEL_ID))
        .where(USERS.USERNAME.eq("email@email.com"))
        .fetch();

Вышеупомянутый стандартный метод соединения работает нормально

Ниже приведена мультисетовая версия.

var result =
      dslContext.select(USERS.FIRST_NAME,
            multiset(select(USER_LEVELS.USER_LEVEL_NAME)
                .from(USER_LEVELS)
                .where(USER_LEVELS.USER_LEVEL_ID.eq(USERS.USER_LEVEL_ID)))
)
            .from(USERS)
            .where(USERS.USERNAME.eq("email@email.com"))
            .getSQL();

Я использую getSQL, чтобы увидеть запущенный sql, который выглядит следующим образом:

select "public"."users"."first_name", 
   multiset(select "public"."user_levels"."user_level_name" 
       from "public"."user_levels" where "public"."user_levels"."user_level_id" = "public"."users"."user_level_id") from "public"."users" where "public"."users"."username" = ?

Проблема, очевидно, заключается в том, что мультимножество находится в sql, что вызывает синтаксическую ошибку.

Я в недоумении, почему это так, если только это не какая-то настройка для моего postgres (о чем я не думаю)

Любые идеи ?

Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
1
0
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, вы неправильно настроили SQLDialect, например.

spring.jooq.sql-dialect=Postgres

См. также: Диалект Spring Boot JOOQ sql не выбран из application.properties

N.B: Это должно работать из коробки, см. github.com/spring-projects/spring-boot/issues/11464, но, видимо, не в вашем случае. Возможно, это другой тип неправильной настройки, или вы на самом деле не используете PostgreSQL, или ошибка в Spring Boot?

Lukas Eder 17.05.2022 09:06

Спасибо, проблема действительно была в диалекте, который я должен был заметить, но я просто подумал, что это что-то с моим запросом или версией Jooq. Поскольку я использую две разные базы данных и создаю два разных контекста DSL в своей конфигурации, изменение в файле свойств не сработало, мне пришлось фактически выполнить config.set(SQLDialect.POSTGRES); Где я настраиваю контексты DSL, чтобы заставить его работать. Возможно, из-за того, что я использую конфиги, он не подбирает диалект автоматически. Не путая вопрос, проблема действительно была в диалекте

duckdivesurvive 17.05.2022 11:39

Другие вопросы по теме