当前位置: 首页 > 知识库问答 >
问题:

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

汤洋
2023-03-14

我想用Spring Boot数据JPA配置我的应用程序,并调用存储过程。然而,在搜索web之后,我发现这种方法必须使用某种“实体表”。

例如,这可以从这里和这里的解释中看出。

但是,我不明白为什么需要将存储过程元数据定义绑定到一个实体上?如果我没有这样的实体表怎么办?没有别的办法了吗?

共有3个答案

孟乐
2023-03-14

最后,在做了一些研究之后,我不打算使用<code>Spring数据JPA</code>来调用存储过程。相反,我将选择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

干杯

路伟
2023-03-14

您可以在存储库界面中使用类似的方法直接调用存储过程

@Procedure(procedureName = "test_pkg.in_and_out_test")
String callStoredProc(Long id, String p_method);
徐佐
2023-03-14

您链接的页面解释了如何从String Data JPA调用存储过程。

它看起来很奇怪,我知道。他们说,您需要定义一个实体来承载存储过程调用。

那么,为什么使用Spring数据而不是JDBC呼叫呢?我只能猜测:

  • 您不想处理打开/关闭/缓存JDBC资源。
  • 您的应用程序有严格的规则:每个DB访问都必须通过Spring Data
 类似资料:
  • 我们正在.NET中构建一个REST API,部署到Azure应用程序服务/Azure API应用程序。通过该API,客户端可以创建“产品”并查询“产品”。产品实体有一组通用的字段,所有客户在创建产品时都必须提供这些字段,如下面的字段(示例) 我们目前将这些产品作为自包含文档存储在Azure Cosmos DB中。 问题一:分区。该集合不会存储大量的文档,我们谈论的最多是大约2 500 000个文档

  • 问题内容: 任何人都可以用C,C ++和Java清楚地解释一下。什么都在堆栈上,什么都在堆上以及何时分配。 我所知道的, 每个函数调用的所有局部变量(无论是基元,指针还是引用变量)都在新的堆栈框架上。 使用new或malloc创建的所有内容都会进入堆。 我对几件事感到困惑。 是在堆上创建的对象成员的引用/基元是否也存储在堆上? 以及在每个框架中递归创建的方法的那些本地成员呢?它们都在堆栈上吗?如果

  • 问题内容: 我在MySQL数据库中存储了大约一百个例程,其中大多数都以“ root”作为定义者。 我有另一个名为“ abc”的mysql帐户,如何将所有例程的定义程序更改为“ abc”。 如果我只能以“ abc”用户而不是“ root”用户身份访问MySQL服务器,是否可以这样做? 问题答案: 据我所知:您将必须获取所有脚本的脚本文本并将其拖放/重新创建为abc。除非abc有权删除/创建过程,否则

  • 我在ngOnInit方法中初始化一个库,如下所示: 然后我在ngOnInit内部从该实例调用此方法: 所以它的方法最终看起来像这样: 但是我不明白为什么console.log打印的结果是未定义的,如果实际上是这样的话。调用console.log的$grid。 我需要在该方法中再次使用该实例来执行以下操作: 但我不能,因为在这个方法中,$grid是未定义的,这对我来说毫无意义。 有什么想法吗?

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。