2012-10-04 72 views
0

試圖構建此查詢,但我想我錯過了一些東西。 這裏是所涉及的類:使用JPA標準查詢API

  1. 用戶
  2. 飲食
  3. DailyDiet

這裏是我的實體的相關部分(一個非常簡單的一個):

public class User { 

@Column(name = "User_Name", nullable = false, length = 15, unique = true) 
public String userName; 

@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = true) 
@PrimaryKeyJoinColumn 
public Diet userDiet; 

} 

public class Diet { 

@OneToOne(optional = false) 
@JoinColumn(name = "User_Id") 
protected User user; 

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true) 
@JoinTable(name = "UsersDiets_DailyDiets", joinColumns = @JoinColumn(name = "User_Id"), inverseJoinColumns = @JoinColumn(name = "DailyDiet_Id")) 
protected Collection<DailyDiet> userDailyDiets; 
} 

public class DailyDiet { 

    @Column(name = "Day") 
    protected long day; 
} 

我想簡單地在特定的一天中吸引用戶每日特定用戶的飲食:

public UserDiet findByUserNameAndDay(String userName, long day) 

但似乎無法使其工作。 我應該爲此構建2個不同的CriteriaQuery對象嗎? 如果我創建了2個不同的謂詞,我該如何使用它們?如果有人可以用這個簡單的查詢來幫助我,不勝感激(我對JPA標準API相當陌生)。

謝謝!

@ManyToOne 
protected Diet userDiet; 

然後在我的DailyDietDao以下斷言:

+1

什麼是UserDiet?你有什麼嘗試?請注意,您的映射是錯誤的:在雙向關聯中,一方必須具有mappedBy屬性,並且不應定義任何JoinColumn。 –

回答

0

得到它通過增加DailyDiet類解決

Predicate userNameCondition = qb.equal(p.get(DailyDiet_.userDiet).get(UserDiet_.user).get(BaseUser_.userDetails).get(UserDetails_.userName), 
     userName);