如何在where子句中使用jpa元模型访问子属性

如何在where子句中使用jpa元模型访问子属性,jpa,properties,criteria,metamodel,Jpa,Properties,Criteria,Metamodel,我有两个实体,它们之间的关系是 public class Client implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private Integer id; @NotNull @Size(min = 3, max = 25) private String firstName; @NotNull @Size(min = 3, max = 25) pr

我有两个实体,它们之间的关系是

public class Client implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private Integer id;

@NotNull
@Size(min = 3, max = 25)
private String firstName;

@NotNull
@Size(min = 3, max = 25)
private String lastName;

private String login;

private String password;

@OneToMany(mappedBy = "client")
private List<Project> projects;
}
我想使用jpametamodel和CriteriaAPI进行查询。像这样:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Project> q = cb.createQuery(Project.class);
Root<Project> projects = q.from(Project.class);
q.where(cb.equal(projects.get(Project_.client), clientId));
我想买点像这样的东西

q.where(cb.equal(projects.get("client.id"), clientId));

但是用jpametamodel。有可能吗?:)

试过这样的东西吗

projects.get(Project_.client).get(Client_.id);

试过这样的吗

projects.get(Project_.client).get(Client_.id);
确定字符串:q.where(cb.equal(projects.get(“client.id”),clientId));导致错误。现在我知道了字符串:q.where(cb.equal(projects.get(Project.client),clientId);做我想要的。(对客户机id进行限制),但现在我想知道如何使用jpametamodel.Ok字符串对子属性进行链引用:q.where(cb.equal(projects.get(“client.id”),clientId);导致错误。现在我知道了字符串:q.where(cb.equal(projects.get(Project.client),clientId);做我想要的。(对客户端id进行限制)但现在我想知道如何使用jpametamodel对子属性进行链引用。
projects.get(Project_.client).get(Client_.id);