Чому ви ніколи не повинні використовувати getSingleResult() у JPA?

Коли запит getSingleResult не повертає жодного рядка, ми отримуємо неперевірений виняток, тобто помилку програміста, відновити це неможливо. Це неправильно. Ми ніколи не знаємо напевно, чого ми можемо очікувати від нашої бази даних, тому створення неперевіреного винятку здається неправильним вибором для цього випадку використання. 13 липня 2011 р.

getSingleResult. Виконайте запит SELECT, який повертає один нетипований результат.

Оскільки наші запити стають складнішими, інколи оператори SQL, згенеровані JPA, не є найбільш оптимізованими. У цьому випадку ми можемо використовувати NativeQueries, щоб зробити запити більш ефективними. NativeQueries дозволяє нам використовувати функції постачальників баз даних. Іноді ці функції можуть підвищити продуктивність наших запитів.

Варіанти використання, пов’язані зі складним звітуванням або аналізом даних не підходять для JPA та Hibernate. Вам потрібно реалізувати дуже складні запити для цих випадків використання, і вам краще реалізувати їх за допомогою SQL, ніж за допомогою JPQL або HQL.

Обмеження результатів запиту в JPA дещо відрізняється від SQL; ми не включаємо ключове слово limit безпосередньо в наш JPQL. Замість цього ми просто робимо один виклик методу Query#maxResults або включаємо ключове слово first або top до назви методу Spring Data JPA.

getSingleResult() Обидва методи використовуються для отримання Entities з нашої бази даних. Ми використовуємо getResultList(), якщо немає гарантії, скільки результатів ми хочемо отримати, getSingleResult використовується для отримання точно одного рядка. Тому єдиний сумнів щодо того, який метод використовувати, це коли ми отримуємо 1 рядок із нашої бази даних.

Оцініть статтю