JPA getSingleResult() 或 null

新手上路,请多包涵

我有一个 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 许可协议

阅读 697
2 个回答

抛出异常是 getSingleResult() 表示找不到它的方式。我个人无法忍受这种 API。它强制进行虚假的异常处理而没有真正的好处。您只需将代码包装在 try-catch 块中。

或者,您可以查询列表并查看其是否为空。这不会引发异常。实际上,由于您没有在技术上进行主键查找,因此可能会有多个结果(即使一个、两个或外键或约束的组合在实践中使这不可能)所以这可能是更合适的解决方案。

原文由 cletus 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 Java 8 中试试这个:

 Optional first = query.getResultList().stream().findFirst();

原文由 Impala67 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题