Ho un insertOrUpdate
metodo che inserisce un Entity
quando non esiste o lo aggiorna se lo fa. Per abilitare questo, devo findByIdAndForeignKey
, se restituito null
inserire se non quindi aggiornare. Il problema è come posso verificare se esiste? Quindi ci ho provato getSingleResult
. Ma genera un'eccezione se il
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;
}
ma getSingleResult
genera un Exception
.
Grazie
getSingleResult()
viene utilizzato in situazioni come: " Sono assolutamente sicuro che questo disco esista. Sparami se non lo fa ". Non voglio testarenull
ogni volta che utilizzo questo metodo perché sono sicuro che non lo restituirà. Altrimenti provoca molta programmazione di caldaia e programmazione difensiva. E se il disco non esiste davvero (contrariamente a quanto ipotizzato), è molto meglioNoResultException
rispetto aNullPointerException
poche righe successive. Naturalmente avere due versioni digetSingleResult()
sarebbe fantastico, ma se dovessi prenderne uno ...