Hql retornando erro

6 respostas
A

o meu metodo:

@Transactional(readOnly=true)
@Query(" SELECT DISTINCT obj FROM Product obj WHERE obj.name =:q AND obj.price =:max_price >= obj.price =:min_price  ")
List<Product>search(@Param("q") String q,@Param("min_price") Double min_price,@Param("max_price") Double max_price);

erro:

2021-06-09 22:36:07.983 ERROR 8904 --- [  restartedMain] o.h.hql.internal.ast.ErrorTracker        :  right-hand operand of a binary operator was null

antlr.SemanticException: right-hand operand of a binary operator was null

6 Respostas

Lucas_Camara

Parece que está faltando um AND no seu HQL. Esse trecho está estranho:

AND obj.price =:max_price >= obj.price =:min_price  
                          ^
A

Bom dia, na verdade eu quero fazer uma comparação de valores, que vá do menor ao maior, deve ser erro de sintaxe, queria saber como faz.

Lucas_Camara

Seria, então, uma ordenação?

Se for, tenta assim:

SELECT DISTINCT 
	obj 
FROM 
	Product obj 
WHERE 
	obj.name = :q 
	AND obj.price >= :min_price
	AND obj.price <= :max_price
ORDER BY
	obj.price
A

obrigado, vou testar aqui.

hugokotsubo

Em SQL você pode usar BETWEEN para esses casos:

SELECT DISTINCT 
	obj 
FROM 
	Product obj 
WHERE 
	obj.name = :q 
	AND
    obj.price BETWEEN :min_price AND :max_price
ORDER BY
	obj.price

No caso, fazer campo BETWEEN minimo AND maximo é equivalente a campo >= minimo AND campo <= maximo.

A

massa demais, muito obrigado.

Criado 10 de junho de 2021
Ultima resposta 10 de jun. de 2021
Respostas 6
Participantes 3