【问题标题】:How to specify Schema name while using @NamedStoredProcedureQuery如何在使用 @NamedStoredProcedureQuery 时指定架构名称
【发布时间】:2018-06-02 22:40:42
【问题描述】:

我正在尝试使用 Spring Annotation @NamedStoredProcedureQuery 调用无参数存储过程。

技术栈是 Spring Data JPA with Hibernate,数据库是 Teradata。

它总是说“找不到程序”失败,因为它试图调用为

   call proc_name()

这注定会失败。

然而调用存储过程的正确方法是

call schemaName.proc_name()

我无法找到在我创建的实体中指定架构名称的方法。

@NamedStoredProcedureQuery(
        name="proc_name",
        procedureName="proc_name",
        resultClasses = { Sc_Refresh.class }
)

@Entity
@Table(schema = "Schema_Name", name = "TEMP_TABLE" )
public class Sc_Refresh {

}

有人可以帮忙吗?

【问题讨论】:

    标签: spring-data teradata


    【解决方案1】:

    找到解决办法。

    在我们使用@Procedure 注解的 Repo 层中,我们应该为过程提供完全限定的名称。例如,

    @Repository
    public interface Repo  extends JpaRepository<Entity, Long>{
    
        @Procedure("SCHEMA_NAME.PROC_NAME")
        void explicitlyNamedProcName();
    
    }
    

    【讨论】:

    • 如果存储的过程也在一个包中怎么办? SCHEMA.PACKAGE_NAME.PROC_NAME???
    【解决方案2】:

    这种方法对我有用。

    @NamedStoredProcedureQuery(
            name="procName",
            procedureName="<schema_name>.proc_name"
    )
    @Entity
    @Table
    public class User {
    ...
    }
    

    在 procedureName 注释属性名称中将模式名称放在数据库过程名称之前。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 2023-03-13
      • 2014-05-11
      • 2014-03-17
      • 2013-09-14
      • 1970-01-01
      相关资源
      最近更新 更多