Tengo un insertOrUpdate
método que inserta un Entity
cuando no existe o lo actualizo si lo hace. Para habilitar esto, tengo que hacerlo findByIdAndForeignKey
, si devuelve null
insertar, si no, actualizar. El problema es cómo verifico si existe. Entonces lo intenté getSingleResult
. Pero arroja una excepción si el
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;
}
pero getSingleResult
lanza un Exception
.
Gracias
getSingleResult()
se usa en situaciones como: " Estoy totalmente seguro de que este registro existe. Dispárame si no existe ". No quiero probarnull
cada vez que uso este método porque estoy seguro de que no lo devolverá. De lo contrario, causa una gran cantidad de programación repetitiva y defensiva. Y si el registro realmente no existe (a diferencia de lo que asumimos), es mucho mejor haberloNoResultException
comparado conNullPointerException
algunas líneas más adelante. Por supuesto, tener dos versiones degetSingleResult()
sería increíble, pero si tengo que elegir una ...