gpt4 book ai didi

java - 将 HibernateTemplate.find(...) 与 String[] 一起使用

转载 作者:行者123 更新时间:2023-12-01 15:39:49 24 4
gpt4 key购买 nike

我再次遇到 HQL 问题:(

我想要的 SQL 是这样的:

select employee.idemployee as id, employee.age as age,     
employee.birthday as birthday, employee.firstName as firstName,
employee.gender as gender, employee.lastName as lastName from employee
employee
inner join employee_skillgroups skillgroup1 on
employee.idemployee=skillgroup1.idemployee
inner join employee_skillgroups skillgroup2 on
employee.idemployee=skillgroup.idemployee
where skillgroup1.idskillgroup = 'Sprachen'
and skillgroup.idskillgroup = 'SoftSkills'

但我就是无法让 HQL 为我生成这个...“Sprachen”和“SoftSkills”是来自 String[] 的两个字符串,我将该方法作为参数给出。该方法目前如下所示:

public List<Employee> findEmployeeWithTwoSkillGroups(final String[] skillGroups) {
return template.find("from Employee e join e.skillGroups as s where s in ?", Arrays.asList(skillGroups).toString
().substring(1, Arrays.asList(skillGroups).toString().length()-1));
}

我将数组“转换”为一个列表,对其执行toString()(所以我得到“[Sprachen,SoftSkills]”)并切断第一个和最后一个字符(所以我获取“语言,软技能”)。
我猜问题是 HQL 生成“[...].idskillgroup in ('Sprachen, SoftSkills')”,就像它将两个字符串视为一个字符串一样......
我就是无法让它像我想要的那样工作:/

有人可以帮助我并提示我下一步要尝试/做什么吗? :-)

格雷兹吉拉拉斯

类似问题:

HQL to get elements that possess all items in a set

最佳答案

正确的 HQL 语句应该或多或少像这样:

from Employee e join e.skillGroups as s where s in ( 'Foo', 'Bar', 'Baz' )

所以你错过了每个单词的“”。

编辑:现在我已经得到了你想要实现的目标:-)

我建议你这样做:

Query query = session.createQuery(
"from Employee e join e.skillGroups as s where s in (:skillGroups)");
// skillGroups must be a Collection type
query.setParameterList("skillGroups", skillGroups);
List list = query.list();

如果您需要结果是 String[] 数组中所有元素的 AND,您可以执行以下操作:

Query query = session.createQuery(
"from Employee e join e.skillGroups as s where s in (:skillGroups) group by e having count(s) = :skillGroupsLength");
query.setParameterList("skillGroups", skillGroups);
query.setParameter("skillGroupsLength", skillGroups.length);
List list = query.list();

关于java - 将 HibernateTemplate.find(...) 与 String[] 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8239057/

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