Обходной путь для Jooq MultiSet Query с пользовательским типом и DataTypeExceptionJAVA

Программисты JAVA общаются здесь
Anonymous
Обходной путь для Jooq MultiSet Query с пользовательским типом и DataTypeException

Сообщение Anonymous »

Проект использует PostgreSQL, а сложный тип.
DDL - это как: < /p>

Код: Выделить всё

CREATE TYPE attached_file AS (
id int8,
file_name varchar(255),
file_size int8,
bucket bucket_type);
< /code>

 Существует сложное выражение, которое включает в себя таблицу с пользовательским типом < /li>
 Существует большой запрос, в котором используется сложное выражение внутри MultiSet () Call < /li>
< /ol>
В некоторых случаях я получаю Datatexcept Bucket.class < /p>
org.jooq.impl.jsonreader
Line 312 < /p>
                if (value instanceof List)
l = patchRecord(ctx, multiset, actualRow, (List) value);
else if (value instanceof Map)
l = patchRecord(ctx, multiset, actualRow, new ArrayList(((Map) value).values()));
else
throw new IllegalStateException();
By debugging, the contents of actualRow parameter and value has an order mismatch.
Value is a map, actually a LinkedHashMap, and is not in the same order as the fields expected in actualRow parameter, the patchRecord call returns a List of Objects in the wrong order, and tries to convert the file_size field's value to Bucket (which is an enum). < /p>
Это выглядит как ошибка в JOOQ, усердно воспроизводить или создать TestCase, который точно воспроизводит его.
Посмотреть код, я думаю, что вызов патч -рекорд должен уважать карту, и пары полей для карты элементов, вместо того, чтобы вызовать значения () на карте. Проблема. (не сработал) < /p>

Код: Выделить всё

row(
LOAD_BOOKING_INFO.fkBookedBy(),
LOAD_BOOKING_INFO.fkBookedBy().portalUser(),
LOAD_BOOKING_INFO.fkBookedBy().disposalFacilityAccessCode(),
LOAD_BOOKING_INFO.fkBookedBy().disposalFacilityContact(),
LOAD_BOOKING_INFO.fkBookedBy().companyAccessCode().company()
).convertFrom(mapping(AuthLoginDto::new))
< /code>
заменяется на < /p>
row(
AUTH_LOGIN.asTable(),
AUTH_LOGIN.portalUser(),
AUTH_LOGIN.disposalFacilityAccessCode(),
AUTH_LOGIN.disposalFacilityContact(),
COMPANY_ACCESS_CODE.company()
).convertFrom(mapping(AuthLoginDto::new)).as(BOOKED_BY)

Сложный тип - это поле для таблицы компании, поэтому он по -прежнему имеет неявную ссылку на соединение, только способ изменился

Подробнее здесь: https://stackoverflow.com/questions/796 ... eexception

Вернуться в «JAVA»