2013-01-21 1 views
0

J'ai deux entités avec relation entre elles.comment accéder aux sous-propriétés avec jpa metamodel dans où clause

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

et

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

Je veux fait une requête en utilisant l'API de jpametamodel et critères. Comme ceci:

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

problème pour moi que je ne sais pas comment obtenir l'accès à « id » propriété du client dans cette chaîne:

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

je veux obtenir quelque chose comme

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

mais avec jpametamodel. C'est possible? :)

+0

Ok la chaîne: Q.Où (cb.equal (projects.get ("client.id"), clientId)); conduire à une erreur. Et maintenant je sais que la chaîne: q.where (cb.equal (projects.get (Project_.client), clientId)); faites exactement ce que je veux. (Faire une restriction sur l'identifiant du client) Mais maintenant je veux savoir comment faire des références de chaîne sur les sous-propriétés en utilisant jpametamodel. – Pavel

Répondre

3

Vous avez essayé quelque chose comme ça?

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

Oui, vous avez raison, ça aide. Remerciements :) – Pavel