【发布时间】:2011-01-01 11:01:12
【问题描述】:
我有一个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()强制您在没有值的情况下使用异常处理,即使没有值是一种常见且自然的情况。最佳实践是异常应该只用于异常情况,而没有值则不是。由于这个原因,很多人不喜欢getSingleResult()。甚至 JPA 诞生的 Hibernate 的作者也批评getSingleResult()。如果你也不喜欢,请点赞:github.com/eclipse-ee4j/jpa-api/issues/298