1

我有 2 个域实体的基本结构:

  1. 用户
  2. 用户详情

用户持有(拥有)UserDetails,而 UseDetails 拥有 String 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);
}

但这不起作用,因为在 User_.userDetails 下找不到 getuserName()。我想这不是这样做的方法,也许我需要在这些表(用户和用户详细信息)之间实现连接?

我该怎么做?

4

1 回答 1

0

我现在无法尝试,但我认为您必须执行以下操作:

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