有什么方法可以在没有实体的情况下使用“@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);

}