我有一个 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
。
谢谢
原文由 Eugene Ramirez 发布,翻译遵循 CC BY-SA 4.0 许可协议
抛出异常是
getSingleResult()
表示找不到它的方式。我个人无法忍受这种 API。它强制进行虚假的异常处理而没有真正的好处。您只需将代码包装在 try-catch 块中。或者,您可以查询列表并查看其是否为空。这不会引发异常。实际上,由于您没有在技术上进行主键查找,因此可能会有多个结果(即使一个、两个或外键或约束的组合在实践中使这不可能)所以这可能是更合适的解决方案。