@Modifying(clearAutomatically = true) @Transactional @Query(nativeQuery = true, value = "UPDATE tb_pessoal_funcionarios SET salario = salario+(salario * :percentualAumento)/100 WHERE id IN (:funcionarioId) AND condicao <> ‘Inativo’ ")
void AlterarSalarioPorPercentual(Double percentualAumento, Long funcionarioId);
porém se o usuário marcar um checkbox na tela, a query teria que ser:
@Modifying(clearAutomatically = true) @Transactional @Query(nativeQuery = true, value = “UPDATE tb_pessoal_funcionarios SET salario = salario+(salario * :percentualAumento)/100 WHERE id IN (:funcionarioId)”)
void AlterarSalarioDemitidosPorPercentual(Double percentualAumento, Long funcionarioId);
alguém saberia me dizer se existe alguma forma de eu fazer isto sem ter que fazer Duas querys?
Usando o @Query acredito que não, teria que ser as duas updates separados.
O que você pode fazer é usar uma implementação mais “braçal” caso queira criar somente uma única query que atenda os dois casos, aí poderia usar Criteria, Specification, JDBCTemplate e afins.
@Query(nativeQuery = true, value = “UPDATE tb_pessoal_funcionarios SET salario = salario+(salario * :percentualAumento)/100 WHERE id IN (:funcionarioId) AND condicao = :condicao")
void alterarSalarioDemitidosPorPercentual(Double percentualAumento, Long funcionarioId, String condicao);
Era muito comum há (muitos) anos atrás ter este tipo de condicionais nas queries:
UPDATE tb_pessoal_funcionarios
SET salario = salario+(salario * :percentualAumento)/100
WHERE id IN (:funcionarioId) AND (condicao <> 'Inativo' or 1 = :skipInativo)
Com o parametro skipInactivo controlas se queres aplicar a todos (1) ou apenas aos não Inativos (0)