1. ホーム
  2. java

[解決済み] JPA getSingleResult() or null

2022-05-01 21:50:29

質問

私は 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() は、見つからないことを示します。個人的には、この種のAPIには我慢がならない。何のメリットもないのに、偽りの例外処理を強いられる。コードをtry-catchブロックで包むだけでいい。

あるいは、リストを照会して、それが空であるかどうかを確認することもできます。これなら例外は発生しません。実際、主キー検索を行っていないので、技術的には複数の結果があり得ます(たとえ、一方、両方、または外部キーや制約の組み合わせが実際にはこれを不可能にしていても)。