【问题标题】:Is it possible use spring data jpa with spring data jdbc?是否可以将 spring data jpa 与 spring data jdbc 一起使用?
【发布时间】:2020-10-31 16:39:55
【问题描述】:

抱歉我的菜鸟问题...

我想知道是否可以将 spring data jdbc 与 spring data jpa 一起使用... 如果是,应该如何配置?

我正在做一个使用 spring data jpa 的项目,我需要调用一个使用填充内存的临时表的过程...我不知道用 spring data jpa 来做,我在想在用 jdbc 做这个...

我需要在 spring data jpa 或 jdbc 中执行此步骤:

CREATE TABLE #tmp_parcela ( 
        Num_Parcela                   tinyint         NOT NULL, 
        Vlr_Emitido_Parcela           numeric(15,2)   NOT NULL, 
        Vlr_Emitido_Juros_Parcela     numeric(15,2)   NULL, 
        Vlr_Emitido_Cor_Mon_Parcela   numeric(15,2)   NULL, 
        Vlr_Emitido_Multa_Parcela     numeric(15,2)   NULL, 
        Dta_Vencto_Parc               datetime        NOT NULL
    ) 
    
    INSERT INTO #tmp_parcela VALUES (2, 125.52, 0, 0, 0, '2020-12-10 00:00:00')
    INSERT INTO #tmp_parcela VALUES (3, 125.52  , 0, 0, 0, '2020-12-10 00:00:00')  
    
    EXEC uspGTMGerar_DAM_ISS_Fixo @psUsuario = 'Curitiba App', @psMaquina = 'Curitiba App', @piNum_Inscricao_Debito_Origem = 48538554, @psiSeq_Debito_Origem = 0, @pdDta_Vencimento = '2020-12-10 00:00:00'

    DELETE #tmp_parcela

【问题讨论】:

  • 您是否尝试将这些查询包装到存储过程中?您使用哪个数据库服务器?
  • 我正在使用带有 jtds 的 sybase

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


【解决方案1】:

有几种方法可以从 JPA 存储库调用存储过程:

  1. 使用@Procedure注解JPA Documentation
public MyRepository extends JpaRepository<MyEntity, Long> {
    @Procedure(procedureName = "mySP")
    int callMyStoredProcedure(String procParam);
}
  1. 使用@Query 注解作为原生查询:
@Query(value = "CALL FIND_MY_ENTITY(:proc_param);", nativeQuery = true)
List<MyEntity> findEntitesByParam(@Param("proc_param") String procParam);

【讨论】:

  • Alex,我需要调用的过程需要一个预填充的临时表,我更新了问题的详细信息
  • 您可以创建另一个存储过程作为包装器来准备临时表(并在需要时在内部传递相关参数),然后执行初始SP,请参阅stackoverflow.com/questions/1184325/…
  • Alex,我做不到...不幸的是,我需要按原样调用此过程...您知道如何配置 spring jdbc 和 aring jpa togeter 吗?
  • 为什么你不能像我描述的那样做这个?无论如何,您都需要在同一个事务中进行一次调用,否则当临时表已经存在或者其数据已经被另一个调用 uspGTMGerar_DAM_ISS_Fixo 更新时,您可能会遇到麻烦。
  • 如何在 Spring Data JPA 中处理临时表?我需要在调用存储过程后创建并删除它...
【解决方案2】:

是的,您可以同时使用 Spring Data JPA 和 Spring Data JDBC。 Spring Boot 会为您完成配置,您只需确保 Spring Data JDBC 处理的所有实体都有 @Table 注释。

但这不是你想要的。

您想要的是 Spring JDBC(其中没有 DATA)。它是 Spring Framework 本身的一部分,尤其是您需要 JdbcTemplate。当您包含 Spring Boot Starter JDBC 时,Boot 基本上应该完成所有配置。

只需在需要的地方注入JdbcTemplate 并编码即可。 一种选择是custom method in your Spring Data JPA repository

如何使用它是一个完全独立的问题,如果您还不知道如何使用,则应该提出这样的问题。

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 2014-10-21
    • 2014-03-10
    • 2021-11-23
    • 2014-07-04
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    相关资源
    最近更新 更多