J'ai une insertOrUpdate
méthode qui insère un Entity
quand il n'existe pas ou le met à jour s'il existe. Pour activer cela, je dois findByIdAndForeignKey
, s'il retourne null
insérer sinon, mettre à jour. Le problème est de savoir comment vérifier s'il existe? Alors j'ai essayé getSingleResult
. Mais cela lève une exception si le
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;
}
mais getSingleResult
jette un Exception
.
Merci
getSingleResult()
est utilisé dans des situations comme: " Je suis tout à fait sûr que ce disque existe. Tirez-moi si ce n'est pas le cas ". Je ne veux pas testernull
chaque fois que j'utilise cette méthode car je suis sûr qu'elle ne la retournera pas. Sinon, cela entraîne beaucoup de programmation passe-partout et défensive. Et si le disque n'existe vraiment pas (contrairement à ce que nous avons supposé), il vaut bien mieux l'avoirNoResultException
par rapport àNullPointerException
quelques lignes plus tard. Bien sûr, avoir deux versions degetSingleResult()
serait génial, mais si je devais en choisir une ...