2013-06-09 3 views
0

J'ai deuxentité de requête avec état sur la relation ManyToMany

Entités mises
@Entity 
    public Report() 

@Id 
@Column(name = "REPORT_ID") 
private long id; 

@JsonIgnore 
@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(
     name="reports_projects", 
     joinColumns={@JoinColumn(name="report_id", referencedColumnName="REPORT_ID")}, 
     inverseJoinColumns={@JoinColumn(name="project", referencedColumnName="PROJECT_ID")}) 
private List<Project> projects; 

secondes est:

@Entity(name = "projects") 
    public class Project 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "PROJECT_ID") 
// seems like spring's jpa has issue hanlde "_" between the words 
private long id; 

@Column(name = "CODE", nullable = false) 
private String code; 

@Column(name = "DESCRIPTION", nullable = false) 
private String description; 

@Column(name = "CREATION_DATE", nullable = false) 
private Date creationDate; 

je suis Tring pour interroger les rapports de projects.code essayé quelques trucs comme

@Query("select reports from org.jpp.domain.quicksearch.ReportQS reports inner join reports.projects p where p.code in :code") 

et

CriteriaBuilder cb = em.getCriteriaBuilder(); 
    CriteriaQuery<QuickSearchResult> query = cb.createQuery(QuickSearchResult.class); 
Metamodel m = em.getMetamodel(); 

EntityType<ReportQS> ReportQSMetaModel = m.entity(ReportQS.class); 

Root<ReportQS> reportsQS = query.from(ReportQS.class); 
Root<Project> projects = query.from(Project.class); 
Join<ReportQS, Project> joinReportsProjects = reportsQS.join("projects"); 
Predicate condition = cb.equal(projects.get("code"),"gnrl"); 
query.select(reportsQS).where(condition); 

TypedQuery<QuickSearchResult> q = em.createQuery(query); 

Je reçois le résultat vide pour les deux requêtes Une idée pour que cela fonctionne?

Merci à l'avance, Oak

Répondre

1

Essayez le code suivant:

String query = "select r from ReportQS r join r.projects p where p.code = :code"; 
List<ReportQS> reports = em.createQuery(query,ReportQS.class).setParameter("code","grnl").getResultList(); 

Assurez-vous que ReportQS est le nom de la classe d'entité (dans votre exemple de code que vous avez un nom différent de classe et un autre nom d'entité utilisé dans question).

+0

merci pour la réponse. Malheureusement, j'ai toujours un résultat vide. Toute autre solution? – oak

+0

Mon erreur! Ça marche. le problème était que j'ai utilisé le mauvais namedColumnName dans le projet. Merci! – oak

Questions connexes