8

voglio convertire il seguente subquery di utilizzare hibernate subquery:Criteri subquery con non nullo

getCurrentSession().createQuery("from Employee where id in (select adminId from Department where adminId is not null)") 
        .list(); 
  • dipendenti:

    @ManyToOne 
    @JoinColumn(name = "fk_department_id", nullable = true) 
    private Department department; 
    
  • Dipartimento:

    @OneToMany(fetch = FetchType.EAGER) 
    @JoinColumn(name = "fk_department_id") 
    private Set<Employee> employees = new HashSet<Employee>(0); 
    

Qualcuno può fornirmi un esempio di questo convertitore, perché ho letto alcuni esempi e non riesco ancora a capire come farlo.

+0

BTW, ho un problema serio di recente con la regolazione di qualsiasi blocco di codice quando si invia una nuova domanda, faccio come al solito copiare il codice dal mio IDE o da file di testo ed evidenziare il codice quindi circondarlo con il pulsante del codice, ma esso viene visualizzato male. –

+0

Questo perché si utilizzano schede anziché spazi. –

+0

puoi dirmi in che modo sei riuscito a riformattare il codice, quindi posso evitarlo in futuro? –

risposta

19
Criteria c = session.createCriteria(Employee.class, "e"); 
DetachedCriteria dc = DetachedCriteria.forClass(Departemt.class, "d"); 
dc.add(Restrictions.isNotNull("d.adminId"); 
dc.setProjection(Projections.property("d.adminId")); 
c.add(Subqueries.propertyIn("e.id", dc)); 

La chiamata setProjection rende il subquery restituire la proprietà adminId solo che invece di tutta la Department entità. Subqueries.propertyIn crea una restrizione: la proprietà id del dipendente cercato deve essere in l'insieme di risultati restituiti dalla sottoquery.

+0

funziona, grazie, ma puoi fornire una piccola spiegazione per le ultime due righe, non ho trovato il documento per loro. –

+0

Fatto. Vedi le mie modifiche. –