Use*_*291 7 java spring stored-procedures spring-data-jpa spring-repositories
所以我想要一个“Void-Repository”,通过它可以访问不一定对实体进行操作的存储过程。
@Repository
public interface StoredProceduresRepository extends CrudRepository<Void, Long> {
@Procedure("my_answer_giver")
String getMyAnswer(@Param("input") String input);
}
Run Code Online (Sandbox Code Playgroud)
但这当然行不通,因为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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你可以的话,你可以使用你拥有的任何实体来代替这个Void。那里提供的实体应该不重要。
public interface StoredProceduresRepository extends JpaRepository<SomeUnrelatedEntity, Long> {
@Procedure("my_answer_giver")
String getMyAnswer(@Param("input") String input);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8222 次 |
| 最近记录: |