Tuesday, August 12, 2025

How to Use RECOMPILE with JPA Query?

How to Use RECOMPILE with JPA Query?

How to Use RECOMPILE with JPA Query?

In JPA, there is no direct way to add SQL Server’s RECOMPILE hint because JPA abstracts database specifics. However, you can achieve similar behavior by using native queries with the OPTION (RECOMPILE) hint or by using stored procedures with WITH RECOMPILE.

1. Using Native Query with OPTION (RECOMPILE)

You can append the SQL Server hint directly in your native SQL query:

String sql = "SELECT * FROM Orders WHERE CustomerID = ?1 OPTION (RECOMPILE)";
Query query = entityManager.createNativeQuery(sql, Order.class);
query.setParameter(1, customerId);
List<Order> results = query.getResultList();

2. Using Stored Procedure with WITH RECOMPILE

Create your stored procedure with the WITH RECOMPILE option:

CREATE PROCEDURE GetOrders
    @CustomerID INT
WITH RECOMPILE
AS
BEGIN
    SELECT * FROM Orders WHERE CustomerID = @CustomerID;
END

Then call it from JPA:

StoredProcedureQuery spQuery = entityManager.createStoredProcedureQuery("GetOrders", Order.class);
spQuery.registerStoredProcedureParameter("CustomerID", Integer.class, ParameterMode.IN);
spQuery.setParameter("CustomerID", customerId);
List<Order> results = spQuery.getResultList();

3. Notes

  • JPA query hints cannot add SQL Server-specific RECOMPILE options.
  • Native queries provide the most direct control over SQL syntax and hints.
  • Stored procedures with WITH RECOMPILE let SQL Server handle plan recompilation.

Summary

To use RECOMPILE in JPA, prefer native queries with OPTION (RECOMPILE) or call stored procedures created with WITH RECOMPILE. This approach forces SQL Server to generate fresh execution plans, helping avoid parameter sniffing issues.

No comments:

AWS Global vs Regional Services AWS Global vs Regional Services Category Global Services...