Mam insertOrUpdate
metodę, która wstawia, Entity
gdy nie istnieje, lub aktualizuje ją, jeśli tak. Aby to włączyć, muszę findByIdAndForeignKey
, jeśli zwróciło, null
wstaw, jeśli nie, to zaktualizuj. Problem w tym, jak sprawdzić, czy istnieje? Więc spróbowałem getSingleResult
. Ale zgłasza wyjątek, jeśli
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;
}
ale getSingleResult
rzuca Exception
.
Dzięki
getSingleResult()
jest używane w sytuacjach typu: „ Jestem całkowicie pewien, że ta płyta istnieje. Zastrzel mnie, jeśli jej nie ma ”. Nie chcę testować zanull
każdym razem, gdy używam tej metody, ponieważ jestem pewien, że jej nie zwróci. W przeciwnym razie powoduje to wiele schematycznych i defensywnych programów. A jeśli rekord naprawdę nie istnieje (w przeciwieństwie do tego, co założyliśmy), znacznie lepiej jest goNoResultException
porównać zNullPointerException
kilkoma wierszami później. Oczywiście posiadanie dwóch wersjigetSingleResult()
byłoby super, ale gdybym miał odebrać jedną ...