Статические функции DSL для row()
, похоже, не используют диалект, используемый в DSLContext.
Я использую postgres с jooq для запроса к моей базе данных. У меня есть Binder для использования с Java-объектами типа InetAddress
, которые я успешно использую в других частях моего приложения. Диалект правильно установлен на postgres при использовании контекстного DSL (DSLContext).
Однако, если я пытаюсь использовать статические функции из класса DSL
, используется диалект DEFAULT, а мой Binder не используется.
В частности, мой проблемный запрос выглядит так:
final var existingLinkRecords = asSeq(create
.selectFrom(l)
.where(row(l.FROM_IP, l.TO_IP).in(links.map(link -> row(link.from().ip(), link.to().ip())).asJava()))
.fetch());
Предыдущий код приводит к следующему исключению:
org.jooq.exception.SQLDialectNotSupportedException: Type class java.net.Inet6Address is not supported in dialect DEFAULT
at org.jooq.impl.DefaultDataType.getDataType(DefaultDataType.java:884)
at org.jooq.impl.DefaultDataType.getDataType(DefaultDataType.java:823)
at org.jooq.impl.DSL.getDataType(DSL.java:21760)
at org.jooq.impl.DSL.val(DSL.java:19522)
at org.jooq.impl.Tools.field(Tools.java:1209)
at org.jooq.impl.DSL.row(DSL.java:20152)
...
Кажется, корень проблемы в этой функции из DSL:
@Deprecated
@Support
public static <T> DataType<T> getDataType(Class<T> type) {
return DefaultDataType.getDataType(SQLDialect.DEFAULT, type);
}
Я не смог найти способ построить RowN()
объекты, кроме использования класса DSL.
Есть ли способ решить эту проблему?