【问题标题】:execute custom JPQL query with panache on quarkus在 quarkus 上使用 panache 执行自定义 JPQL 查询
【发布时间】:2021-11-26 13:30:55
【问题描述】:

我们在 quarkus/graphql 应用程序中使用 panache 来访问数据库。它可以很好地过滤和获取数据。现在我们想执行自定义 jqpl 查询,但是我们没有找到一种方法来使用 panache 和活动记录模式。

为什么这对我们来说是必要的?我们想使用 timescaledb,它是 PostgreSQL 的一个扩展。而要获取聚合数据,我们需要在数据库级别使用它的函数。

为什么不使用 sql 查询?我们的 graphql 接口基于我们的 java 代码中的字段名称。编写 sql 查询需要我们在用于某些 graphql 查询的过滤器中使用列名。

有没有办法用华丽的方式执行自定义 jqpl 查询?

亲切的问候, 马尔科

【问题讨论】:

    标签: jpql timescaledb quarkus-panache


    【解决方案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 了解我的函数返回一组可管理的 &lt;table&gt; 结果。也许您可以以类似的方式处理您的查询。

    【讨论】:

    • 您好乔纳,感谢您的回答。我们没有使用 spring 或 spring-data,因为我们正在使用 quarkus。但我会看看你为映射创建空表的建议。也许这有助于解决我们的问题。
    • 嗨,Marko,我正在调查,也许这个问题是相关的:github.com/quarkusio/quarkus/issues/5348 还有很好的资源:@​​987654324@
    • 您好 Jona,抱歉回复晚了。项目中的优先级发生了变化,我们不再对此进行处理。谢谢你的链接。我认为他们的方向是正确的。
    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多