Domanda

Voglio convertire la seguente subquery per utilizzare la sottoquery Hibernate:

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

    @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 convertito, perché ho letto alcuni esempi e non riesco ancora a capire come farlo.

È stato utile?

Soluzione

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

Il setProjection la chiamata fa restituire la sottostante il adminId proprietà solo invece del tutto Department entità. Il Subqueries.propertyIn crea una restrizione: la proprietà id del dipendente cercato deve essere in L'insieme di risultati restituiti dalla sottoquery.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top