Skip to content

Instantly share code, notes, and snippets.

@vicly
Created July 11, 2019 04:36
Show Gist options
  • Save vicly/8b73d9cebfcf425e4316ae98a5087ca9 to your computer and use it in GitHub Desktop.
Save vicly/8b73d9cebfcf425e4316ae98a5087ca9 to your computer and use it in GitHub Desktop.
[JPA and stored procedure] #JPA #SQL
CREATE OR REPLACE FUNCTION backup_order(
  IN created_from TIMESTAMP,
  IN created_to TIMESTAMP,
  OUT backup_total BIGINT)
// ...


@Entity
@Table("order")
@NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(
        name="backupOrder,
        procedureName = "backup_order",
        parameters = {
            @StoredProcedureParameter(
                mode = ParameterMode.IN,
                type = java.util.Date.class,
                name = "created_from"),
            @StoredProcedureParameter(
                mode = ParameterMode.IN,
                type = java.util.Date.class, // error if java.time.Instant
                name = "created_to")),
            @StoredProcedureParameter(
                mode = ParameterMode.OUT,
                type = Long.class,           // "BIGINT" maps to 'Long'
                name = "backup_total"),
        }
    )
})
public class Order {
//..
}


@Repository
public interface OrderRepository extends JpaRepository<Order, UUID> {
  @Procedure(name = "backupOrder") // Logic name defined above
  long backupOrder(
      @Param("created_from") java.util.Date orderCreatedFrom,
      @Param("created_to") java.util.Date orderCreatedTo);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment