Java создает nativequery со списком bytearray - PullRequest
0 голосов
/ 27 марта 2019

Привет! Я пытаюсь передать список byteArray запросу SQL, но мой код не работает.

public List<Message> findAll(List<byte[]> ids) {
    String sqlString = "SELECT * FROM MYTABLE WHERE ID in (" + StringUtils.join(ids, ',') + ")";    
    Query query = em.createNativeQuery(sqlString).setParameter(1, ids); 
    return query.getResultList();
}

1 Ответ

0 голосов
/ 27 марта 2019

Ваши идентификаторы - это список байтовых массивов (т.е. он имеет два измерения).Метод StringUtils.join не работает с этим.Кроме того, вам не нужно устанавливать массивы в качестве параметра, поскольку вы не указали никаких параметров в своем запросе.

Если вы выведете строку SQL, вы увидите, что она не совсем верна.

Вам придется сначала выровнять свой список массивов, прежде чем использовать его.Кто-то, вероятно, может сделать это с потоками в одной строке кода, но более простой способ - использовать цикл for и новый массив.

Я не проверял это, но что-то вроде:

List<Strings> list = new ArrayList<>();
for (byte[] idArray : ids) {
    list.add(StringUtils.join(idArray, ','); // join each array
}
String all = StringUtils.join(list, ','); // join all of the arrays
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...