在 quarkus 上使用 panache 执行自定义 JPQL 查询
Posted
技术标签:
【中文标题】在 quarkus 上使用 panache 执行自定义 JPQL 查询【英文标题】:execute custom JPQL query with panache on quarkus 【发布时间】:2021-11-26 13:30:55 【问题描述】:我们在 quarkus/graphql 应用程序中使用 panache 来访问数据库。它可以很好地过滤和获取数据。现在我们想执行自定义 jqpl 查询,但是我们没有找到一种方法来使用 panache 和活动记录模式。
为什么这对我们来说是必要的?我们想使用 timescaledb,它是 PostgreSQL 的一个扩展。而要获取聚合数据,我们需要在数据库级别使用它的函数。
为什么不使用 sql 查询?我们的 graphql 接口基于我们的 java 代码中的字段名称。编写 sql 查询需要我们在用于某些 graphql 查询的过滤器中使用列名。
有没有办法用华丽的方式执行自定义 jqpl 查询?
亲切的问候, 马尔科
【问题讨论】:
【参考方案1】:您在寻找自定义查询吗?
@Query(
value = "SELECT time_bucket(...), avg(temperature) FROM conditions",
nativeQuery = true)
Collection<ConditionSummary> dailyTemperatureSummary();
我认为这是一个很好的检查资源:https://www.baeldung.com/spring-data-jpa-query
我从来没有使用过华丽的东西,但是我在从 Hasura 层获取 GQL 时遇到了一些类似的难题,因为我的查询中缺少应该注册为表的类型。
长话短说,我创建了一些空表结构来映射我的函数中返回一组行的相同类型。
关于此特定部分的注意事项: https://docs.timescale.com/timescaledb/latest/tutorials/custom-timescaledb-dashboards/#building-views-for-our-timescaledb-metrics
看:
CREATE TABLE compressed_chunk AS
SELECT compress_chunk((c.chunk_schema ||'.' ||c.chunk_name)::regclass)
FROM timescaledb_information.chunks c
WHERE NOT c.is_compressed limit 0;
这只是我正在做的一个技巧,让我可以声明这个函数:
CREATE OR REPLACE FUNCTION compress_chunk_named(varchar) returns setof compressed_chunk AS ...
因此,它允许 Hasura 了解我的函数返回一组可管理的 <table>
结果。也许您可以以类似的方式处理您的查询。
【讨论】:
您好乔纳,感谢您的回答。我们没有使用 spring 或 spring-data,因为我们正在使用 quarkus。但我会看看你为映射创建空表的建议。也许这有助于解决我们的问题。 嗨,Marko,我正在调查,也许这个问题是相关的:github.com/quarkusio/quarkus/issues/5348 还有很好的资源:@987654324@ 您好 Jona,抱歉回复晚了。项目中的优先级发生了变化,我们不再对此进行处理。谢谢你的链接。我认为他们的方向是正确的。以上是关于在 quarkus 上使用 panache 执行自定义 JPQL 查询的主要内容,如果未能解决你的问题,请参考以下文章