собственные проблемы с запросами - PullRequest
0 голосов
/ 29 декабря 2018

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

public List<Customer> searchBar(String entityProperty, String value) {

    String nativeQuery = "SELECT * FROM devices WHERE customer_id IN (SELECT customers.id FROM customers WHERE ? = ?)";
    Query query = session.createNativeQuery(nativeQuery);
    query.setParameter(1, entityProperty);
    query.setParameter(2, value);
    return query.getResultList();

Вы можете предположить, что:

String entityProperty = "phoneNumber"
   String value = "222222222"

когда я пытаюсь таким образом, я получаю пустой результат, но если я жестко закодирую entityProperty в выражении nativeQuery, оно будет работать следующим образом:

String nativeQuery = "SELECT * FROM devices WHERE customer_id IN (SELECT customers.id FROM customers WHERE phoneNumber = ?)";
Query query = session.createNativeQuery(nativeQuery);
query.setParameter(1, value);
return query.getResultList();

спасибо за ваше время:)

1 Ответ

0 голосов
/ 29 декабря 2018

То, что setParameter используется для установки значения для столбца, но не для имени столбца.Используйте общую Java для динамического составления имени столбца. Что-то вроде приведенного ниже, вы должны понять:

public List<Customer> searchBar(String entityProperty, String value) {

    String nativeQuery = String.format("SELECT * FROM devices WHERE customer_id IN (SELECT customers.id FROM customers WHERE %s = ?)",entityProperty);
    Query query = session.createNativeQuery(nativeQuery);
    query.setParameter(1, value);
    return query.getResultList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...