У мене є 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()було б дивним, але якщо мені доведеться забрати одну