Я нигде не смог найти ни похожую проблему, ни похожий ответ, и после многих часов поиска я наконец нашел решение.
ПРОБЛЕМА:
Использование UNION в JavaСобственный запрос и значение столбца, всегда являющееся пустой строкой (''
)
(быстрый пример) Строка запроса
String queryString = "SELECT * FROM ( " +
" SELECT " +
" a_type as 'Contract Type', " +
" name as 'Full Name', " +
" lent_value as 'Credits', " +
" '' as 'Payment Info' " +
" FROM free_users " +
" UNION " +
" SELECT " +
" type as 'Contract Type', " +
" name as 'Full Name', " +
" value as 'Credits', " +
" payment_info as 'Payment Info' " +
" FROM paid_users " +
") results " +
"ORDER BY results.`Full Name` ";
Создание запроса с помощью Entity Manager
Query query = entityManager.createNativeQuery(queryString);
И выполнить его
query.getResultList();
Ошибка, которая возвращается в StringIndexOutOfBoundsException
с сообщением об ошибке String index out of range: 0
Эта проблема возникает из-за пустой строкив столбце первый SELECT.
Спящий режим не может соответствовать значению ''
первого SELECT, поэтому следующий UNION завершается ошибкой.
Значение столбца должно быть не менее , строка длиной 1 символ
ИсправленоСтрока запроса
String correctedQueryString = "SELECT * FROM ( " +
" SELECT " +
" a_type as 'Contract Type', " +
" name as 'Full Name', " +
" lent_value as 'Credits', " +
" 'p' as 'Payment Info' " +
" FROM free_users " +
" UNION " +
" SELECT " +
" type as 'Contract Type', " +
" name as 'Full Name', " +
" value as 'Credits', " +
" payment_info as 'Payment Info' " +
" FROM paid_users " +
") results " +
"ORDER BY results.`Full Name` ";