加入JPA 2标准API

时间:2012-08-28 09:24:46

标签: jpa jpa-2.0

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

  1. 用户
  2. 的UserDetails
  3. 用户持有(拥有)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()。 我想这不是这样做的方法,也许我需要在这些表之间实现Join(User和UserDetails)?

    我该怎么办?

1 个答案:

答案 0 :(得分:0)

我现在不能尝试,但我认为你必须这样做:

Predicate condition = qb.equal(user.get(User_.userDetails).get(UserDetails_.userName), userName);