Repository Java Spring Boot

bom dia,

tenho a seguinte query:

@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?

att;

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.

1 curtida

Eu faria assim:

@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);
1 curtida

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)

1 curtida

bom dia a todos.

trabalhando em cima do checkbox e passando como parâmetro na URL, fiz desta forma e deu certo para mim:

@Modifying(clearAutomatically = true)
@Transactional
@Query(nativeQuery = true, value = "UPDATE tb_pessoal_funcionarios SET salario = salario+(salario * :percentualAumento)/100 "
								 + "WHERE id IN (:funcionarioId) "
				                 + "AND (:alterarFuncionariosDemitidos IS true OR condicao <> 'Inativo') ")
void AlterarSalarioPorPercentual(Double percentualAumento, Long funcionarioId, Boolean alterarFuncionariosDemitidos);

obg;

1 curtida