0

このクエリを作成しようとしましたが、何か不足していると思います。関連するクラスは次のとおりです。

  1. ユーザー
  2. ダイエット
  3. 毎日の食事

これが私のエンティティの関連部分です(非常に単純なものです):

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 にまったく慣れていません)。

ありがとう!!!

4

1 に答える 1

0

DailyDiet クラスに追加することで解決しました:

@ManyToOne
protected Diet userDiet;

そして、私の DailyDietDao では、次の述語:

Predicate userNameCondition = qb.equal(p.get(DailyDiet_.userDiet).get(UserDiet_.user).get(BaseUser_.userDetails).get(UserDetails_.userName),
        userName);
于 2012-10-07T14:14:45.267 に答える