Что вы могли бы сделать в качестве обходного пути является создание следующих небезопасным, но гарантированно работать вспомогательный API:
public static <T1, T2, T3> Row3<T1, T2, T3> row3(Select<Record3<T1, T2, T3>> select) {
return (Row3) DSL.row(select.field(1), select.field(2), select.field(3));
}
Или, если вы хотите принять ставки на внутренних jOOQ, это будет работать так же:
public static <T1, T2, T3> Row3<T1, T2, T3> row3(Select<Record3<T1, T2, T3>> select) {
(Row3<T1, T2, T3>) select.fieldsRow();
}
суффикс 3
необходим, потому что без суффикса, вы не могли бы перегружать различные методы row
принимая различные записи степени, из-за общего типа стирания.
Эта строка может затем быть действительно использован как таковой:
Select<Record3<Long, Integer, BigDecimal>> s = getFromSomewhere();
Row3<Long, Integer, BigDecimal> row = row3(s);
// use it in a sub-select
Select<Record2<Long, Integer>> x = DSL.select(row.field1(), row.field2()).from(s);
Я также зарегистрировать это как функция запроса для jOOQ 3.6.0: #3796.
Тип строки кажется полезным, см. Http://stackoverflow.com/questions/19638337/keep-type-information-of-aliased-fields-in-jooq?rq=1, но я не знаю, как постройте строку из моего выбора. – Thilo