Mam insertOrUpdatemetodę, która wstawia, Entitygdy nie istnieje, lub aktualizuje ją, jeśli tak. Aby to włączyć, muszę findByIdAndForeignKey, jeśli zwróciło, nullwstaw, 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 getSingleResultrzuca 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ć zanullkaż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 goNoResultExceptionporównać zNullPointerExceptionkilkoma wierszami później. Oczywiście posiadanie dwóch wersjigetSingleResult()byłoby super, ale gdybym miał odebrać jedną ...