我们如何处理具有单个实体类的多个存储过程
Posted
技术标签:
【中文标题】我们如何处理具有单个实体类的多个存储过程【英文标题】:how do we handle multiple stored procedure with single entity class 【发布时间】:2021-06-21 22:08:13 【问题描述】:我想创建一个rest API,它将存储过程名称作为输入,过程参数作为rest API参数。当我创建一个实体类时,我只获得一个表访问权限,例如我有一个客户表,但我的存储过程访问不同的表和视图,它给了我一个错误:“无效的列名 id”这是因为执行的过程不使用我们在实体类中提到的列和表。
我想使用 spring mvc 和 jpa 创建这个带有 spring rest 的 API。
我也想验证系统ID是否存在于表中,例如tablename:customer sysid : ram, procedure_name:sp_byid 。
现在,它的工作原理是使用实体类中使用的 table(customer) 检查 systemid 输入,我什至无法获取单个数据,即 procedure_name,因为我们无法传递“从 id = x 的表名中选择 colname " 在@query 注释中。如果存在记录,我们要检查与 id 映射的存储过程。 sp_byid 是从不同表“用户”获取数据的存储过程,但我们无法做到这一点,因为实体类没有与存储过程使用的表相同的表,并给出“无效的列名 id”错误。 这是一个存储过程的用例示例,其中只有一条记录,我还有很多要添加。
我们如何处理这个问题,是否有任何替代 jpa 可以在没有实体的情况下工作并且只传递自定义查询?
示例休息 URL:localhost:8080/get/systemid/procedurename
【问题讨论】:
您可以为此使用 EntityManager。这是一篇解释它的博客文章:vladmihalcea.com/best-way-call-stored-procedure-jpa-hibernate 工作正常! @Ghokun 【参考方案1】:我发现进行自定义查询的答案是制作自定义存储库以通过 Entitymanager 获取数据。但自定义查询返回一个可以转换为对象列表的查询类型。你不能像实体一样获得键值对。
【讨论】:
以上是关于我们如何处理具有单个实体类的多个存储过程的主要内容,如果未能解决你的问题,请参考以下文章
从 SQL Server 中检索各种存储过程的数据的单一方法,如何处理参数?