是否可以使用JPA @Query()如下所示执行SQL Server存储过程
@Query(nativeQuery = true, value = "exec [dbo].[uspGetVinorUserInfo] =:vin")
List<Object> findCommandStatusByVinOrderByCreatedTimestampDesc(@Param("vin") String vin);
答案 0 :(得分:0)
自JPA 2.1版本开始,请参阅NamedStoredProcedureQuery注释。但是在我看来,您使用了某些特定的JPA实现或某些框架(可能是Spring Data JPA?),因为@Query
注释不是JPA specification的一部分;因此,我很难为您的案例提供具体的代码段。
答案 1 :(得分:0)
我找不到使用@Query执行MS-SQL SP的方法,但是我使用下面的代码执行了MS-SQL存储过程,并且运行良好。
package com.ford.cevs.scheduler.repository;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.ParameterMode;
import javax.persistence.PersistenceContext;
import javax.persistence.StoredProcedureQuery;
@Repository
public class CommandStatusRepositoryImpl implements CommandStatusRepository {
@PersistenceContext
protected EntityManager em;
@Override
public String executeCommandStatusPurge(Integer minutes) {
StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("MyProcedureName");
// set parameters
storedProcedure.registerStoredProcedureParameter("minutes", Integer.class, ParameterMode.IN);
storedProcedure.setParameter("minutes", minutes);
storedProcedure.execute();
String result = (String)storedProcedure.getSingleResult();
return result;
}
}
MS-SQL存储过程
ALTER PROCEDURE [dbo].[MyProcedureName] @minutes int
AS
SET nocount ON
DECLARE @Message VARCHAR(40);
SET @Message = ' Completed, '
-- <Your code> --- @minutes
SELECT @Message
以下链接显示了不同的方式: https://www.programcreek.com/java-api-examples/index.php?api=javax.persistence.StoredProcedureQuery