2016-11-21 4 views
2

Возможно ли в jOOQ изменить тип данных поля при выборе?jOOQ select field тип данных

Например, у меня есть источники, сгенерированные jOOQ, и есть поле X, и я хочу изменить его тип данных. Я пытаюсь добавить конвертер.

Пример:

select(PERSON.field(PERSON.ADDRESS.getName(), addressConverter.getDataType())); 

я не могу легко заменить поле таблицы. Мне нужно удалить поле из полей таблицы, а затем сделать новый select (example).

ответ

0

Простейший способ «изменить» поле, чтобы иметь новый тип данных для конкретного запроса SELECT, заключается в использовании Field.coerce(DataType). Например:

select(PERSON.ADDRESS.coerce(addressConverter.getDataType())) 
.from(...) 

Если вы хотите сохранить все другие поля в PERSON таблице, можно продолжить так:

select(Stream.of(PERSON.fields()).map(
    f -> f == PERSON.ADDRESS 
     ? f.coerce(addressConverter.getDataType()) 
     : f).toArray(Field[]::new)) 
.from(...) 

Конечно, можно также учитывать эту конкретную замену типа данных в специальной функции.