提问人:Martin Mucha 提问时间:11/10/2023 更新时间:11/15/2023 访问量:17
有没有办法将实体数组传递到存储过程中?
Is there a way how to pass array of entities into stored procedure?
问:
我有一个项目,它使用休眠,并且确实需要将实体数组传递到存储过程中。
有关于存储过程、使用数组的过程、简单/自定义数据类型的教程/文档。我能找到那些。但是我没有找到一个答案/博客文章/示例/任何如何将 N 个实体传递到存储过程中的方法。我能找到的只是几十个未回答的问题、关闭的 jira 票证等。
这在某种程度上可能吗?我想它的路线可能是:在oracle(或其他数据库)中创建自定义类型,创建采用该自定义类型的存储过程,然后以某种方式将整个实体映射到该自定义类型(从未这样做过),然后以某种方式从springdata使用该自定义类型调用该存储过程(从未这样做过)。应该/可以工作,但缺乏证据,任何人这样做是可怕的。
有人可以确认概述的路径是否有效,或者更好的是,可以显示一些示例/文档来证明已完成?
注意:拜托,我想避免讨论其他策略,如何在没有存储过程或类似想法的情况下实现“相同的结果”。答:“不,使用 hibernate/jpa 是不可能的”这完全没问题,并且可以节省我(和其他人)思考这种方式的时间。
答:
据我所知:
使用数据库驱动程序调用存储过程是微不足道的。通过springdata间接做同样的事情是令人讨厌的,但可行。据我所知,无法从 hibernate/jpa 调用具有自定义类型的存储过程。
- 文档中没有显示如何使用自定义类型调用存储过程的方法,仅显示琐碎之处。
- 没有办法实现UserType,Type,SqlType并将其应用于存储过程
- 我没有找到一种方法,如何短路休眠才能塞进去普通的jdbc调用这样做。
相反,我能够找到许多要求这样做的帖子,其中许多用户无法提供示例,包括 hibernate 论坛上 hibernate 团队的答案。
我不确定这是否是有效的答案,但根据经验,我会说:不,这在休眠中不受支持。这很可怕,因为这可能变得必要/最佳,经过多年的发展,你被锁定了。这种无法/异常复杂地完成琐碎的任务应该表明使用不同的框架。
如果您陷入困境,我认为唯一可能的出路是:如果需要,请刷新,并使用spring org.springframework.jdbc.object.StoredProcedure调用存储的proc。可悲的是,这可能是唯一的出路。
评论