我有一个在不存在时insertOrUpdate
插入Entity
或在存在时更新的方法。要启用此功能,我必须执行findByIdAndForeignKey
,如果返回的话则返回null
insert,然后更新。问题是如何检查它是否存在?所以我尝试了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()
它用在以下情况中:“ 我完全确定该记录存在。如果不存在,请枪Shoot我。” 我不想null
每次使用此方法都进行测试,因为我确定它不会返回它。否则,它将导致大量重复样板和防御性编程。而且,如果该记录确实不存在(与我们所假设的相反),那么NoResultException
与NullPointerException
以后的几行相比要好得多。当然拥有两个版本getSingleResult()
会很棒,但是如果我必须拿起一个版本...