希望有人可以帮助我进行此HQL查询。
我在用着:
Query query = session.createQuery(sql);
sql在哪里:
select distinct c.id from EstateConsumer as c where c.clientId = ? and (c.vehicleReg1 or c.vehicleReg2) like ?
但出现以下异常:
org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: or near line 1, column 121
那么,如何通过使用一个“喜欢”来使用“或”语法呢?
但是,以下方法有效:
select distinct c.id from EstateConsumer as c where c.clientId = ? and c.vehicleReg1 like ? or c.vehicleReg2 like ?
但我不想使用多个“赞”
您可以使用 REGEX 解决问题,例如:
REGEXP_LIKE('Hello world', 'Hello', 'mars') = 1
因此,您可以替换查询:
select ... where c.clientId = ? and c.vehicleReg1 like ? or c.vehicleReg2 like ?
通过在这里使用此查询:
SELECT ... WHERE c.clientId = ? and REGEXP_LIKE(?, c.vehicleReg1, c.vehicleReg2) = 1 -- -------------------------------------^^
这意味着如果您的值?是like c.vehicleReg1或c.vehicleReg2返回1,则匹配错误
?
c.vehicleReg1
c.vehicleReg2
1
注意
@ mm759,由于程序的编码和结构方式…它仅传递2个参数(一个用于clientId,一个用于多个vehicleReg列)
您可以在查询的多个位置使用相同的参数,如下所示:
q = getEntityManager().createNamedQuery( "select ... where c.clientId = :par1 and c.vehicleReg1 like :par2 or c.vehicleReg2 like :par2"); //-------------------------------^^----------------------------^^--------------------------^^ q.setParamettre("par1", "value1"); q.setParamettre("par2", "value2");