2012-08-28 3 views
1

내가이 도메인 엔티티의 기본 구조가 가입 :는 JPA 2 기준 API와

  1. 사용자
  2. 된 UserDetails 사용자가 보유하고

을 된 UserDetails (A가 있습니다), 그리고 UseDetails는 문자열을 가지고 사용자 이름.

JPA criteria API를 사용하여 주어진 사용자 이름으로 User를로드하는 간단한 쿼리를 커밋하고 싶습니다.() User_.userDetails에서 찾을 수 없습니다

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 때문에 작동하지 않습니다 코드에서

,이 같은 다소보고를하고 싶습니다. 내가 할 수있는 방법이 아닌 것 같아요, 아마도 그 테이블 (사용자와 UserDetails) 사이에 조인을 구현해야합니까?

어떻게해야합니까?

답변

0

지금은 그것을 시도 할 수없는,하지만 난 당신이 같은 것을 할 생각합니다 : 이것은 좋은 모습

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

, 나는 그것을 밖으로 시도 할 수 있지만이 그 일을 가장 좋은 \ 올바른 방법인지 궁금 .. – forhas

+0

@ YogevLidor : 음, "경로"를 사용하여 이것을 달성해야한다고 확신합니다. 내 구문이 100 % 맞는지 확실하지 않습니다. – sinuhepop

+0

나중에 "경로"를 살펴 보겠습니다. 이제는 제대로 작동하는 것 같습니다. 감사! – forhas