Ich habe eine insertOrUpdate
Methode, die ein einfügt, Entity
wenn es nicht existiert, oder es aktualisiert, wenn es existiert. Um dies zu aktivieren, muss ich findByIdAndForeignKey
, wenn es zurückgegeben hat, null
einfü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 getSingleResult
wirft 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 nichtnull
jedes 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
, alsNullPointerException
einige Zeilen später. NatürlichgetSingleResult()
wäre es fantastisch, zwei Versionen von zu haben, aber wenn ich eine abholen