gpt4 book ai didi

mysql - Spring mvc + hibernate + 列表中的 IN 子句

转载 作者:行者123 更新时间:2023-11-29 21:37:54 25 4
gpt4 key购买 nike

我在 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),然后从最后一个查询(我承认这有点难看)我必须通过从列表中获取结果来缩小结果范围露西。显然,我的 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 语法。

关于mysql - Spring mvc + hibernate + 列表中的 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34769364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com