简体   繁体   中英

invalidDataAccessApiUsageException - OUT/INOUT Parameter is not available. Upgrading from springboot 1.5.7 to 2.1.6 and hibernate 5.3

I am in process of upgrading my project from springboot 1.5.7 to 2.1.6, everything looks good after some modifications and correcting compile errors.

when i try some test case for saving object and to return one column using @procedure, I see below error

org.springframework.dao.InvalidDataAccessApiiUsageException: OUT/INOUT parameter not available: serviceRequestId; nested exception is java.lang.IllegalArgumentException: OUT/INOUT parameter not available

below is my repository class:

 public interface ServiceRequestRepository extends CrudRepository<ServiceRequest, Long> {

    @Procedure(name = "saveServiceRequest")
    long saveServiceRequest(@Param("payloadIn") String payloadIn,
                            @Param("action") String action,
                            @Param("orderId") String orderId,
                            @Param("status") String status);
}

here is my ServiceRequestSnapshot

    @Entity
@Table(name = "service_request")
@NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(name = "saveServiceRequest",
        procedureName = "service_request_pkg.saveServiceRequest",
        parameters = {
            @StoredProcedureParameter(mode = ParameterMode.IN, name = "payloadIn", type = String.class),
            @StoredProcedureParameter(mode = ParameterMode.IN, name = "action", type = String.class),
            @StoredProcedureParameter(mode = ParameterMode.IN, name = "orderId", type = String.class),
            @StoredProcedureParameter(mode = ParameterMode.IN, name = "status", type = String.class),
            @StoredProcedureParameter(mode = ParameterMode.OUT, name = "serviceRequestId", type = Long.class)
        })
})
@Repository
public class ServiceRequest implements Serializable {
    @Id
    @GenericGenerator(name = "service_request_seq_gen", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", parameters = { @org.hibernate.annotations.Parameter(name = "sequence_name", value="service_request_seq") , @org.hibernate.annotations.Parameter(name = "allocationSize", value = "1")})
    @GeneratedValue(generator = "service_request_seq_gen")
    @Column(name = "SERVICE_REQUEST_SID")
    private long serviceRequestId;
    @Column(name = "payload_in")
    @Lob
    private String payloadIn;

and here is my procedure:

    CREATE OR REPLACE PACKAGE service_request_pkg AS

  PROCEDURE saveServiceRequest(payload IN VARCHAR2, action IN VARCHAR2, orderId IN VARCHAR2, status IN VARCHAR2, serviceRequestId OUT number);

END service_request_pkg;


CREATE OR REPLACE PACKAGE BODY service_request_pkg AS

  PROCEDURE saveServiceRequest(payload IN VARCHAR2, action IN VARCHAR2, orderId IN VARCHAR2, status IN VARCHAR2, serviceRequestId OUT number) AS

    BEGIN

      insert into service_request (SERVICE_REQUEST_SID, PAYLOAD, ACTION, ORDER_ID, STATUS, CREATED_AT, UPDATED_AT) values (service_request_seq.nextval, payload, action, orderId, status, systimestamp, systimestamp) returning SERVICE_REQUEST_SID into serviceRequestId;
      commit;
    END saveServiceRequest;

END service_request_pkg;

Any suggestions please, i am blocked with this.

Possibly connection been closed before get parameter value.

Wrap java function calling stored procedure with @Transactional

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM