Eu tenho um insertOrUpdate
método que insere um Entity
quando não existe ou atualizá-lo, se existir. Para habilitar isso, eu tenho que findByIdAndForeignKey
, se ele retornou null
inserir, se não for, atualizar. O problema é como verifico se ele existe? Então eu tentei getSingleResult
. Mas lança uma exceção se o
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;
}
mas getSingleResult
joga um Exception
.
obrigado
getSingleResult()
é usado em situações como: " Estou totalmente certo de que esse registro existe. Atire em mim se não existir ". Não quero testarnull
todas as vezes que uso esse método porque tenho certeza de que ele não será devolvido. Caso contrário, isso causa muitos clichês e programação defensiva. E se o registro realmente não existir (como oposto ao que assumimos), é muito melhorNoResultException
compará-lo comNullPointerException
algumas linhas mais tarde. É claro que ter duas versõesgetSingleResult()
seria fantástico, mas se eu tiver que pegar um ...