为什么在Spring Data JPA中的实体上存储过程元数据定义?

时间:2017-08-23 07:35:47

标签: java spring jpa spring-boot spring-data-jpa

我想用Spring Boot Data JPA配置我的应用程序并调用存储过程。但是,在搜索网络后,我发现这种方法必须使用某种实体表"。

例如,可以看作herehere解释。

但是,我很困惑为什么需要在实体上绑定存储过程元数据定义?如果我没有这样的实体表怎么办?还有另一种方式吗?

3 个答案:

答案 0 :(得分:0)

您链接的网页,他们解释了如何您可以从String Data JPA调用存储过程。

我知道这看起来很奇怪。他们说,你需要定义一个实体来捎带它上面的存储过程调用。

那么为什么要使用Spring Data代替JDBC调用呢?我只能猜测:

  • 您不想处理打开/关闭/缓存JDBC资源。
  • 您的应用有严格的规则:每个数据库访问都必须通过Spring Data

答案 1 :(得分:0)

您可以在Repository接口

中使用类似的东西直接调用存储过程
@Procedure(procedureName = "test_pkg.in_and_out_test")
String callStoredProc(Long id, String p_method);

答案 2 :(得分:0)

经过一些研究后,我不会使用Spring Data JPA来调用存储过程。相反,我会选择Spring JDBCTemplate

以下是如何做到这一点:

1)在pom.xml中添加以下依赖项(请注意我使用的是Spring Boot):

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        <version>1.5.6.RELEASE</version>
    </dependency>

2)在您的DAO课程中,注入以下内容:

@Autowired
private JdbcTemplate jdbcTemplate;

3)在你的DAO课程中,你可以使用类似于下面给出的内容:

    LOGGER.info("Calling stored proc...");
    SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withSchemaName("test").withProcedureName("test_proc");
    SqlParameterSource in = new MapSqlParameterSource().addValue("name", "akshay");
    Map<String, Object> out = simpleJdbcCall.execute(in);
    LOGGER.info("Output from procedure: {}", out.get("fullname"));
    LOGGER.info("Returned from stored proc.");

可在此处获取更多信息:https://docs.spring.io/spring/docs/3.0.0.M4/reference/html/ch12s05.html

干杯