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