Hibernate: это хорошая практика для установки фиксированных параметров? - PullRequest
0 голосов
/ 31 декабря 2018

Я использую Java + Hibernate + MariaDB и у меня есть вопрос о передовой практике.

Если вы хотите выполнить этот запрос:

UPDATE Pics SET views = 0 WHERE id=:id_pic;

Я использую это в своем коде Java:

Transaction tx = session.getTransaction();
try {           
    tx.begin();

    NativeQuery query = session.createNativeQuery("UPDATE Pics SET views = 0 WHERE id=:id_pic");
    query.setParameter("id_pic", id_pic);
    result = query.executeUpdate();

    tx.commit();
}
// Exceptions stuff...

Как видите, я использую параметр id_pic, чтобы избежать проблем с безопасностью.Мой вопрос заключается в том, что если мне нужно использовать параметры, когда я использую фиксированные переменные , такие как 0, который появляется в запросе (это всегда должно быть 0, это метод сброса).Я имею в виду, должен ли я использовать следующий запрос или приведенный выше?:

NativeQuery query = session.createNativeQuery("UPDATE Pics SET views=:views WHERE id=:id_pic");
query.setParameter("id_pic", id_pic);
query.setParameter("views", String.valueOf(0));
result = query.executeUpdate();

Спасибо!

Ответы [ 2 ]

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

Рекомендуется использовать параметры, поскольку у вас есть несколько преимуществ, таких как:

  • Вам не нужно беспокоиться о внедрении SQL
  • Поставщик персистентности сопоставляет параметры запроса справильные типы
  • Поставщик персистентности может выполнить внутреннюю оптимизацию для обеспечения лучшей производительности.

Plus более прост в обслуживании, и если вы хотите создать более универсальное update *В методе 1012 * может иметь смысл использовать два параметра, поскольку, возможно, в будущем вам может потребоваться обновить конкретную картинку со значением представления, отличным от 0 (НОЛЬ).

Надеюсь, это поможет.

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

Поскольку «views» всегда будет 0, я бы сказал, что первая версия более правильная.Это лучше подходит для цели.Не беспокойтесь о том, что 0 жестко закодирован: он не должен изменяться.

Тем не менее, если в будущем вам нужно будет также взаимодействовать со столбцом "views" в качестве динамического параметра, я бы создал другой запрос, в который я передал бы оба столбца в качестве параметра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...