繁体   English   中英

有没有办法在没有实体的情况下使用`@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注释而不必创建虚拟实体,或者我是否坚持使用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;
    }
}

如果对你来说没问题,你可以使用你拥有的任何 Entity 来代替这个Void 在那里提供的实体应该无关紧要。

public interface StoredProceduresRepository extends JpaRepository<SomeUnrelatedEntity, Long> {

        @Procedure("my_answer_giver")
        String getMyAnswer(@Param("input") String input);

}

我一直在像这样将它与数据库视图一起使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM