Я пытаюсь использовать JPA (и Spring Boot 2) для выполнения хранимой процедуры SQL Server.Вот процедура:
CREATE Procedure [dbo].[GetStatus]
@statusId char(32),
@bar int
AS
BEGIN TRY
SELECT IIF(COUNT(1)>0 , 1, 0) FROM Status WITH (NOLOCK)
WHERE statusId = @statusId AND bar = @bar
END TRY
BEGIN CATCH
EXEC EventLog @@PROCID
END CATCH
GO
Я пытаюсь получить возвращаемое значение, но не могу найти способ сделать это.Моя сущность:
@Entity
@Table(name = "status")
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(name = "getStatusByStatusId",
procedureName = "GetStatus",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "statusId", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "bar", type = Integer.class) })
})
public class Status implements Serializable {
@Id
@GeneratedValue
private Long id;
private Integer bar;
private String statusId;
private Date createDate;
}
А мой репозиторий:
@Repository
public interface StatusRepository extends JpaRepository<Status, Long> {
@Procedure("GetStatus")
int getStatusByStatusId(@Param("statusId") String statusId, @Param("bar") Integer bar);
}
Когда я запускаю этот метод из уровня обслуживания, я получаю ошибку:
«Параметр out не был определен для хранимой процедуры ...»
Я попытался добавить параметр out (назвав его count и введите Integer).Я пробовал List, Object [], но ничего не получалось.Единственное, что сработало, это если я изменил метод репозитория, чтобы вернуть void.Но в этом случае я не могу получить возвращаемое значение.Итак, мой вопрос, как я могу получить это значение SELECT?Любая помощь приветствуется.Мой app.yml имеет:
datasource:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://dev.lsd.com:1433;databaseName=Qrex;integratedSecurity=true;MultiSubnetFailover=true;authenticationScheme=JavaKerberos
username:
password:
jpa:
hibernate:
ddl-auto: none
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
show-sql: true
database-platform: org.hibernate.dialect.SQLServerDialect
database: sql_server
, и моя зависимость от gradle:
compile "com.microsoft.sqlserver:mssql-jdbc:6.4.0.jre8"