1

私は2つのドメインエンティティの基本構造を持っています:

  1. ユーザー
  2. UserDetails

ユーザーがUserDetailsを保持し(持っている)、UseDetailsが文字列userNameを持っている場合。

JPA基準APIを使用して、指定されたユーザー名でユーザーをロードする単純なクエリをコミットしたいと思います。

コードでは、多かれ少なかれ次のように見せたいと思います。

public User findByUsername(String userName) {
    CriteriaBuilder qb = entityManager.getCriteriaBuilder();
    CriteriaQuery<User> c = qb.createQuery(User.class);
    Root<User> user = c.from(User.class);
    Predicate condition = qb.equal(user.get(User_.userDetails.getuserName()), userName);
    c.where(condition);
    TypedQuery<User> q = entityManager.createQuery(c);
    List<User> result = q.getResultList();

    if (result.isEmpty()) {
        return null;
    }
    return result.get(0);
}

ただし、getuserName()がUser_.userDetailsの下に見つからないため、これは機能しません。これはそれを行う方法ではないと思います。おそらく、これらのテーブル(UserとUserDetails)の間に結合を実装する必要がありますか?

どうすればいいですか?

4

1 に答える 1

0

今は試すことができませんが、次のようなことをしなければならないと思います。

Predicate condition = qb.equal(user.get(User_.userDetails).get(UserDetails_.userName), userName);
于 2012-08-28T09:46:09.293 に答える