有什么方法可以在没有实体的情况下使用“@Procedure”注释?
Any way to use the `@Procedure` annotation without an entity?
所以我想要一个 "Void-Repository" 通过它可以访问不一定对实体进行操作的存储过程。
@Repository
public interface StoredProceduresRepository extends CrudRepository<Void, Long> {
@Procedure("my_answer_giver")
String getMyAnswer(@Param("input") String input);
}
但这当然行不通,因为 CrudRepository
期望 Void
是一个实体。
有没有一种方法可以使用 @Procedure
注释而不必创建虚拟实体,或者我是否坚持使用 class 实现,它利用 EntityManager
通过 prepared 进行查询声明?
因为老实说,那太丑了:
@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;
}
}
如果可以,您可以使用您拥有的任何实体来代替这个 Void
。那里提供的实体应该无关紧要。
public interface StoredProceduresRepository extends JpaRepository<SomeUnrelatedEntity, Long> {
@Procedure("my_answer_giver")
String getMyAnswer(@Param("input") String input);
}
所以我想要一个 "Void-Repository" 通过它可以访问不一定对实体进行操作的存储过程。
@Repository
public interface StoredProceduresRepository extends CrudRepository<Void, Long> {
@Procedure("my_answer_giver")
String getMyAnswer(@Param("input") String input);
}
但这当然行不通,因为 CrudRepository
期望 Void
是一个实体。
有没有一种方法可以使用 @Procedure
注释而不必创建虚拟实体,或者我是否坚持使用 class 实现,它利用 EntityManager
通过 prepared 进行查询声明?
因为老实说,那太丑了:
@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;
}
}
如果可以,您可以使用您拥有的任何实体来代替这个 Void
。那里提供的实体应该无关紧要。
public interface StoredProceduresRepository extends JpaRepository<SomeUnrelatedEntity, Long> {
@Procedure("my_answer_giver")
String getMyAnswer(@Param("input") String input);
}