ฉันมีinsertOrUpdate
วิธีการแทรกEntity
เมื่อไม่มีหรืออัปเดตหากมี เพื่อเปิดใช้งานนี้ฉันต้องfindByIdAndForeignKey
ถ้ามันกลับมาnull
แทรกถ้าไม่แล้วอัปเดต ปัญหาคือฉันจะตรวจสอบว่ามีอยู่ได้อย่างไร? getSingleResult
ดังนั้นผมจึงพยายาม แต่มันก็มีข้อยกเว้นถ้า
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;
}
แต่พ่นgetSingleResult
Exception
ขอบคุณ
getSingleResult()
มีการใช้งานในสถานการณ์เช่น: " ฉันมั่นใจอย่างยิ่งว่าบันทึกนี้มีอยู่โปรดยิงฉันหากไม่เป็นเช่นนั้น " ฉันไม่ต้องการทดสอบnull
ทุกครั้งที่ฉันใช้วิธีนี้เพราะฉันมั่นใจว่ามันจะไม่ส่งคืน มิฉะนั้นจะทำให้เกิดการเขียนโปรแกรมสำเร็จรูปจำนวนมากและการป้องกัน และถ้าบันทึกไม่มีอยู่จริง (ตรงข้ามกับสิ่งที่เราคิดไว้) มันจะดีกว่ามากถ้าNoResultException
เทียบกับNullPointerException
สองสามบรรทัดในภายหลัง แน่นอนมีสองรุ่นgetSingleResult()
จะน่ากลัว แต่ถ้าผมต้องเลือกอย่างใดอย่างหนึ่ง ...