将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方法描述了一种这样的方法。
在我看来,这里是选项:
答案 0 :(得分:1)
我相信你在询问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数据库中创建了存储函数。
希望有所帮助:)