我需要构建一个hibernate查询,它会执行以下操作:
select p from Person p where (p.name, p.surname) in (('Peter', 'Black'), ('Thomas', 'Peterson'), ('Julia', 'Cook'))
名称/姓氏列表的长度未预先定义,名称和姓氏可以包含任何字符(名称和姓氏命名仅用于说明目的)
此外,我想将值作为查询参数插入,以防止sql注入。
不可接受的解决方案:
(p.name || '--' || p.surname) in (:mergedNameSurname)
我想避免的解决方案:
((p.name = :name1 and p.surname = :surname1) or (p.name = :name2 and p.surname = :surname2) ...)
你知道如何做到这一点吗?
答案 0 :(得分:1)
我认为没有一个干净的Hibernate解决方案。您可以采用您建议的两种方法之一,也可以添加一个非规范化列,表示两列的串联。即使采用这种方法,您最终也会构建类似于最终查询的内容。