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 回答