Pergunta

Eu gostaria de usar o JPA sobre o JDBC para um novo aplicativo. Estou estritamente usando consultas nomeadas e métodos básicos do CRUD do JPA Entity Manager, que me permite (com a ajuda do Hibernate ou qualquer outra implementação da JPA) para extrair todas as consultas nativas do SQL que serão realizadas no banco de dados. Com esta lista de consultas estáticas, entendo que posso criar um pacote DB2 que são todos os planos de execução dos meus pedidos.

Portanto, minha pergunta é: executar essas consultas através do JDBC contra o DB2 aproveitará esses planos de execução, ou não? Entendo que o produto PureQuery pode capturar a lista de pedidos SQL. Ainda através do JDBC e não através da API específica da PureQuery, fornece mais? Um recurso de ligação estática db2 tão específico? Ou é equivalente ao JDBC?

Obrigado por qualquer peça de resposta.

Foi útil?

Solução

Os aplicativos JDBC executam apenas o SQL dinâmico (ou seja, o DB2 não usa pacotes estáticos).

Existem apenas duas maneiras de obter SQL estático (onde as consultas são armazenadas em um pacote no banco de dados): escreva seu aplicativo usando o SQLJ (que elimina JPA/Hibernate) ou use o PureQuery (que fica entre JDBC e o banco de dados).

Lembre -se de que, mesmo com o SQL dinâmico, o DB2 abre os planos de execução para consultas; portanto, se elas forem executadas com frequência (ou seja, elas permanecem no cache), você não verá a sobrecarga da compilação de consultas. O cache só é útil se as consultas forem uma partida exata de byte por byte, então select * from t1 where c1 = 1 não é o mesmo que select * from t1 where c1 = 2, nem é select * from t1 where C1 = 1 (o que dá o mesmo resultado, mas a consulta difere). Usando marcadores de parâmetros (select * from t1 where c1 = ?) é chave. Seu DBA pode ajustar o tamanho do cache do catálogo para ajudar a maximizar a relação de acerto neste cache.

Embora o cache ajude a evitar a compilação repetidamente de uma consulta, ele não oferece a estabilidade do plano que o SQL estático faz, então YMMV.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top