Комментарии к вашим существующим попыткам:
Совсем не печатать
Это не работает.jOOQ (или, скорее, PostgreSQL) нужна информация о типе для привязки переменной enum.Это, конечно, позор, потому что преобразование из строк в перечисления можно рассматривать как прямое, так что это может быть сделано неявно.Но PostgreSQL в настоящее время не работает таким образом.
Тип столбца как Enum.class + приведение или приведение к Enum.class
Это все еще не работает, потому чтопо той же причине.Теперь jOOQ знает, что мы имеем дело с перечислением (он знал раньше, если значение было не нулевым), но мы не знаем тип перечисления PostgreSQL, к которому нам нужно привести переменную bind.
Относительно "(Wut? Я абсолютно установил свой диалект на SQLDialect.POSTGRES_9_5.)" :
Если вы посмотрите, откуда происходит трассировка стека, это когда вы передаете Enum.class
до DSL.field()
.В этом статическом методе диалект в контексте отсутствует, поэтому появляется это сообщение об ошибке.
Решение
Вы были близки:
Создание объявленияhoc enum в Java
При использовании EnumType
в PostgreSQL вам также необходимо вернуть ссылку Schema
.Это делается для того, чтобы различать EnumType
экземпляров, которые были созданы с помощью PostgreSQL или MariaDB / MySQL.Это, вероятно, не должно быть строго необходимо.Проверим это через https://github.com/jOOQ/jOOQ/issues/7941
А пока попробуйте это:
private enum Direction implements EnumType {
NORTH, EAST, SOUTH, WEST;
@Override
public String getLiteral() {
return this.name();
}
@Override
public Schema getSchema() {
return MY_SCHEMA;
}
@Override
public String getName() {
return "direction";
}
}