2012-08-28 59 views
1

我有2個結構域的實體的基本結構:加入與JPA 2標準API

  1. 用戶
  2. 的UserDetails

其中用戶保持(具有)的UserDetails,和UseDetails具有字符串用戶名。

使用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)之間的連接?

我應該怎麼做?

回答

0

我現在不能嘗試,但我認爲你必須做這樣的事情:

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

這看起來不錯,我可以試一下,但我不知道這是否是做的最好的\正道.. – forhas

+0

@YogevLidor:嗯,我很確定你必須使用「路徑」來實現這一點。我不確定我的語法是否100%正確。 – sinuhepop

+0

我稍後會看看「路徑」,現在看起來工作得很好。謝謝! – forhas