Hibernate - Query parametrizada

Olá pessoal,

Estou fazendo alguns testes com o hibernate. Executei o código abaixo e verifiquei uma diferença de tempo entre as duas consultas. Alguém sabe me explicar porque a query parametrizada é mais lenta?


// Inicio da execução do programa 18:22:50,630

String cpf = "11122233344"

String PESSOA_FISICA = "select nome from pessoas where cpf = '?1' " ; 
String sql =  PESSOA_FISICA.replace("?1", cpf); 

Query query = entityManager.createNativeQuery(sql); 

query.getResultList();

// Após executar a primeira query 18:22:50,646   (16 milisegundos)

String PESSOA_FISICA2 = "select nome from pessoas cpf = ?1 ";
Query query2 = entityManager.createNativeQuery(PESSOA_FISICA2); 
query2.setParameter(1, cpf);

query2.getResultList();

// Após executar a segunda query 18:22:50,865 (219 milisegundos)

Grato

Simples:

Na função de replace do String só há uma simples TROCA de alguns caracteres, certo?

Já o método setParameter() faz com que o Hibernate verifique coisas como:

  • é String? então coloque aspas.
  • é numérico? nada de aspas.
  • é data? então converta e depois coloque aspas.
  • outras e outras e outras.