Ho un insertOrUpdatemetodo che inserisce un Entityquando non esiste o lo aggiorna se lo fa. Per abilitare questo, devo findByIdAndForeignKey, se restituito nullinserire 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 getSingleResultgenera un Exception.
Grazie
getSingleResult()viene utilizzato in situazioni come: " Sono assolutamente sicuro che questo disco esista. Sparami se non lo fa ". Non voglio testarenullogni 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 meglioNoResultExceptionrispetto aNullPointerExceptionpoche righe successive. Naturalmente avere due versioni digetSingleResult()sarebbe fantastico, ma se dovessi prenderne uno ...