gpt4 book ai didi

spring - 如何在 Spring Data 的查询中使用表函数

转载 作者:行者123 更新时间:2023-11-29 13:31:35 25 4
gpt4 key购买 nike

将 Spring Data JPA 与 Hibernate 一起使用时,有哪些选项可用于编写与 table functions 连接的查询? .

例如,我想生成如下所述的查询:

CASE 1: SELECT * FROM getfoo(1) AS t1;

CASE 2: SELECT * FROM getfoo(1) x INNER JOIN tbl1 y on x.id = y.id;

编辑为了详细说明,我将 Spring Data 用于所有 CRUD(效果很好)。但是,我需要编写复杂的查询,以使用“表函数”连接表。表函数(又名表值用户定义函数)是返回表值的数据库函数,这些值可以在 JOIN 子句中与表结合使用。 Postgresql 和 Sql Server 支持它们。

在 Spring Data 领域,它包含的不仅仅是 JPA,在编写此类查询时要考虑哪些选项?根据您的经验,最佳做法是什么? user2658013 非常友好地描述了一种使用 entityManager.reateNativeQuery 方法的方法。

在我看来,这里是选项:

  • JPA
    • 使用@NamedStoredProcedureQuery (>=JPA 2.1)
    • 使用 entityManager.createNativeQuery 或 @NamedNativeQuery
  • 非标准
    • 使用 Spring Data 的 @Query 直接在存储库方法上声明查找器查询。
    • 使用SimpleJdbcCall
    • 还有其他的吗?

最佳答案

我相信您是在询问有关 Postgres 存储函数的问题。 Postgres 存储函数类似于“存储过程”。所以我想您是在问如何使用 JPA 调用存储过程?我很接近吗?

以下伪代码源自此处发布的详细信息(请参阅存储采购部分): http://www.oracle.com/technetwork/articles/vasiliev-jpql-087123.html

EntityManager em = emf.createEntityManager();
SOMEVAL_TYPE result = (SOMEVAL_TYPE)em.createNativeQuery("SELECT getfoo(?1) FROM SOMEDB")
.setParameter(1, SOME_PARM)
.getSingleResult();

通常,您可以将 JPQL 与 JPA 一起使用,而不是 SQL。

注意!以上假定您已经在 Postgres 数据库中创建了存储函数。

希望对您有所帮助:)

关于spring - 如何在 Spring Data 的查询中使用表函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21949189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com