Я использую 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 (о чем я не думаю)
Любые идеи ?
Вероятно, вы неправильно настроили SQLDialect
, например.
spring.jooq.sql-dialect=Postgres
См. также: Диалект Spring Boot JOOQ sql не выбран из application.properties
Спасибо, проблема действительно была в диалекте, который я должен был заметить, но я просто подумал, что это что-то с моим запросом или версией Jooq. Поскольку я использую две разные базы данных и создаю два разных контекста DSL в своей конфигурации, изменение в файле свойств не сработало, мне пришлось фактически выполнить config.set(SQLDialect.POSTGRES); Где я настраиваю контексты DSL, чтобы заставить его работать. Возможно, из-за того, что я использую конфиги, он не подбирает диалект автоматически. Не путая вопрос, проблема действительно была в диалекте
N.B: Это должно работать из коробки, см. github.com/spring-projects/spring-boot/issues/11464, но, видимо, не в вашем случае. Возможно, это другой тип неправильной настройки, или вы на самом деле не используете PostgreSQL, или ошибка в Spring Boot?