I’m having troubles with HQL again 🙁
My desired SQL is this:
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'
But i just can’t get HQL to generate me this …
“Sprachen” and “SoftSkills” are two string coming out of a String[] I’m giving the method as a parameter. The method currently looks like this:
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));
}
I “cast” the array to a list, execute toString() on it (so i get “[Sprachen, SoftSkills]”) and cut off the first and the last char (so i get “Sprachen, SoftSkills”).
I guess the problem is that HQL generates “[…].idskillgroup in (‘Sprachen, SoftSkills’)”, like it treats the two strings like ONE string …
And i just can’t get it to work like i want it to :/
Can someone please help me and give me a hint what to try/do next? 🙂
Greetz
gilaras
Simmilar question:
It’s a prepared statement, not string concatenation. It handles (‘Sprachen, SoftSkills’) like a single string because it is a single string. You want to insert a collection in your query. I’m not sure how to do this in hibernateTemplate, but hibernate itself supports adding a collection. see the hibernate documentation.