2016-01-13 42 views
0

我使用,在DaoImplementation一个SQL查询(因为我不能使用HQL或条件找到如何解决它)。的Spring MVC +休眠+ IN子句从列表

我有一个List对象,我需要使用List的元素以SQL IN子句,但我不知道浩做...

这是我的DAO方法实施

public List<Illuminazione> showLightsSituationsByUser(List<Park> parks) { 
     Query pianiQuery = getSession().createQuery("from Piano p where p.park = :parks"); 
     pianiQuery.setParameterList("parks", parks); 
     List <Piano> piani = pianiQuery.list(); 

     Query luciQuery = getSession().createQuery("from Luce l where l.piano in :piani"); 
     luciQuery.setParameterList("piani", piani); 
     List<Luce> luci = luciQuery.list(); 

     String query = "select i.id_evento, i.id_luce, i.last_date_time, l.numero_luce, l.nome_luce, ill.MaxDate, i.isLit "; 
     query += "from illuminazione i inner join luci l on i.id_luce= l.id_luce and l.id_piano in "+luci+" "; 
     query += "inner join (SELECT `id_luce` as numeroLuce2, max(date_time) as MaxDate from illuminazione i2 group by `i2`.`id_luce`) ill "; 
     query += "on i.id_luce = ill.`numeroLuce2` and i.`date_time` = ill.MaxDate order by i.`id_luce` asc"; 
     SQLQuery q = getSession().createSQLQuery(query); 
     q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); 
     List<Illuminazione> lista = q.list(); 

     return lista; 
    } 

从第2个查询我得到的名单,我需要(荧光素酶),然后从最后一个查询(这是一个有点难看,我承认)我通过从列表中把他们拉近结果荧光素酶。显然,我的luci表有一个id_piano字段。

我怎样才能达到我需要什么?由于

回答

0

如果我理解的问题,这样的事情应该工作:

StringBuilder sb = new StringBuilder(); 
    sb.append("select i.id_evento ... l.id_piano in ("); 
    for (Piano piano : piani){ 
     sb.append("'"); 
     sb.append(piani.getId()); 
     sb.append("', "); 
    } 
    sb.append(") inner join ..."); 
    SQLQuery q = getSession().createSQLQuery(sb.toString()); 

只要确保你不包括在最后的钢琴逗号,以确保适当的SQL语法。