【发布时间】:2020-04-08 22:45:09
【问题描述】:
所以我想要一个“Void-Repository”,通过它可以访问不一定对实体进行操作的存储过程。
@Repository
public interface StoredProceduresRepository extends CrudRepository<Void, Long> {
@Procedure("my_answer_giver")
String getMyAnswer(@Param("input") String input);
}
但这当然行不通,因为CrudRepository 期望Void 是一个实体。
有没有办法使用@Procedure 注释而不必创建虚拟实体,或者我是否坚持使用EntityManager 通过准备好的语句进行查询的实现类?
因为老实说,这很丑:
@Repository
public class StoredProceduresRepository {
@PersistenceContext
EntityManager em;
public String getMyAnswer(String input) {
Query myAnswerGiver = em
.createStoredProcedureQuery("my_answer_giver")
.registerStoredProcedureParameter("input", String.class, ParameterMode.IN)
.setParameter("input", input);
Object result = ((Object[]) myAnswerGiver.getSingleResult())[0];
return (String) result;
}
}
【问题讨论】:
标签: java spring stored-procedures spring-data-jpa spring-repositories