List中的Spring mvc+hibernate+IN子句



我在DaoImplementation中使用SQL查询(因为我无法使用HQL或Criteria来找到如何解决它)。

我有一个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;
    }

从前两个查询中,我得到了我需要的列表(luci),然后从最后一个查询中(我承认这有点难看),我必须通过从List-luci中获取结果来缩小结果。显然,我的luci表有一个id_piano字段。

我怎样才能得到我需要的东西?感谢

如果我理解这个问题,这样的东西应该会起作用:

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语法。

最新更新