【发布时间】:2014-03-23 20:07:52
【问题描述】:
将 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(效果很好)。但是,我需要编写将表与“表函数”连接起来的复杂查询。表函数(AKA 表值用户定义函数)是返回表值的数据库函数,可以在 JOIN 子句中与表结合使用。 Postgresql 和 Sql Server 支持它们。
在 Spring Data 领域中,它包含的不仅仅是 JPA,在编写此类查询时需要考虑哪些选项?根据您的经验,最佳实践是什么? user2658013 非常友好地描述了一种使用 entityManager.reateNativeQuery 方法的方法。
在我看来,选项如下:
- JPA
- 使用@NamedStoredProcedureQuery (>=JPA 2.1)
- 使用 entityManager.createNativeQuery 或 @NamedNativeQuery
- 非标
- 使用 Spring Data 的 @Query 直接在存储库方法上声明查找器查询。
- 使用 SimpleJdbcCall
- 还有其他人吗?
【问题讨论】:
-
当使用 Spring Data JPA 时,您将使用 JPA。在 JPA 中,您拥有实体及其关系,并且您在此级别使用 JPA 查询。但不是在表级别。 - 但也许我理解你的问题是错误的,那么请多解释一下你的问题。
-
1.你可以使用视图。 2. JPA 2.1 支持存储过程,但你现在必须使用 eclipselink
-
@NeilMcGuigan 谢谢,Hibernate >= 4.3.1.Final 支持 JPA 2.1
-
@Ralph,我已经用更多上下文进一步编辑了这个问题。就您的观点而言,您是对的,但是,我想知道 Spring Data 保护伞下是否还有其他东西可以帮助处理与类型安全、保持事物干燥以及功能/甚至在 JPA 领域之外的过程映射。
标签: spring hibernate postgresql jpa spring-data