У мене є insertOrUpdate
метод, який вставляє, Entity
коли він не існує, або оновлює його, якщо він є. Щоб увімкнути це, я повинен findByIdAndForeignKey
, якщо він повернувся, null
вставити, якщо не, то оновити. Проблема полягає в тому, як я перевіряю, чи існує? Тому я спробував getSingleResult
. Але це кидає виняток, якщо
public Profile findByUserNameAndPropertyName(String userName, String propertyName) {
String namedQuery = Profile.class.getSimpleName() + ".findByUserNameAndPropertyName";
Query query = entityManager.createNamedQuery(namedQuery);
query.setParameter("name", userName);
query.setParameter("propName", propertyName);
Object result = query.getSingleResult();
if (result == null) return null;
return (Profile) result;
}
але getSingleResult
кидає Exception
.
Дякую
getSingleResult()
використовується в таких ситуаціях, як: " Я повністю впевнений, що цей запис існує. Стріляйте, якщо цього немає ". Я не хочу тестуватиnull
кожен раз, коли я використовую цей метод, тому що я впевнений , що він не поверне його. Інакше це спричиняє чимало котлових та захисних програмувань. І якщо запису насправді не існує (як би протилежне тому, що ми припустили), набагато краще цеNoResultException
порівняно зNullPointerException
кількома рядками пізніше. Звичайно, мати дві версіїgetSingleResult()
було б дивним, але якщо мені доведеться забрати одну