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.