Saya memiliki insertOrUpdate
metode yang memasukkan Entity
jika tidak ada atau memperbaruinya jika ada. Untuk mengaktifkan ini, saya harus findByIdAndForeignKey
, jika dikembalikan null
masukkan jika tidak kemudian perbarui. Masalahnya adalah bagaimana cara memeriksa apakah itu ada? Jadi saya mencoba getSingleResult
. Tapi itu membuat pengecualian jika
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;
}
tapi getSingleResult
melempar Exception
.
Terima kasih
getSingleResult()
digunakan dalam situasi seperti: " Saya sangat yakin bahwa rekaman ini ada. Tembak saya jika tidak ". Saya tidak ingin mengujinull
setiap kali saya menggunakan metode ini karena saya yakin itu tidak akan mengembalikannya. Jika tidak, itu menyebabkan banyak pemrograman boilerplate dan defensif. Dan jika record benar-benar tidak ada (berlawanan dengan apa yang kita asumsikan), akan lebih baikNoResultException
jika dibandingkan denganNullPointerException
beberapa baris kemudian. Tentu saja memiliki dua versigetSingleResult()
akan luar biasa, tetapi jika saya harus mengambil satu ...