2013-01-21 33 views
0

我有两个实体之间存在关系。如何访问jpa元模型中的子属性where子句中的

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; 
} 

public class Project implements Serializable { 
private static final long serialVersionUID = 4762714047114442539L; 

@Id 
@GeneratedValue 
private Integer id; 

private String name; 

@Temporal(TemporalType.TIMESTAMP) 
private Date startDate; 

@ManyToOne 
@JoinColumn 
private Client client; 
} 

我想用jpametamodel和标准的API做了一个查询。就像这样:

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)); 

问题对我来说,我不知道怎么去访问这个字符串客户的“ID”属性:

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

我想要得到的东西像

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

但与jpametamodel。有可能的? :)

+0

确定字符串: q.where(cb.equal(projects.get(“client.id”),clientId)); 导致错误。现在我知道字符串: q.where(cb.equal(projects.get(Project_.client),clientId)); 正是我想要的。 (限制客户端ID) 但现在我想知道如何使用jpametamodel对子属性执行链参考。 – Pavel

回答

3

试过这样的事情?

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

是的,你对它的帮助。 Thankks。 :) – Pavel