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