Ich habe eine insertOrUpdateMethode, die ein einfügt, Entitywenn es nicht existiert, oder es aktualisiert, wenn es existiert. Um dies zu aktivieren, muss ich findByIdAndForeignKey, wenn es zurückgegeben hat, nulleinfügen, wenn nicht, dann aktualisieren. Das Problem ist, wie überprüfe ich, ob es existiert? Also habe ich es versucht getSingleResult. Aber es löst eine Ausnahme aus, wenn die
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;
}
aber getSingleResultwirft ein Exception.
Vielen Dank
getSingleResult()wird in Situationen wie: " Ich bin absolut sicher, dass dieser Datensatz existiert. Erschieß mich, wenn es nicht existiert " verwendet. Ich möchte nichtnulljedes Mal testen, wenn ich diese Methode verwende, da ich sicher bin , dass sie nicht zurückgegeben wird. Andernfalls verursacht es viel Boilerplate und defensive Programmierung. Und wenn der Datensatz wirklich nicht existiert (im Gegensatz zu dem, was wir angenommen haben), ist es viel besser, ihn zu habenNoResultException, alsNullPointerExceptioneinige Zeilen später. NatürlichgetSingleResult()wäre es fantastisch, zwei Versionen von zu haben, aber wenn ich eine abholen