gpt4 book ai didi

java - 如何使用 jOOQ 基于复合数据类型构建条件?

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

在我看来,我有一个引用另一个表作为其数据类型的列:

CREATE VIEW my_view AS
SELECT c.*, CAST(p.* AS parent) AS entity_parent
FROM entity_child c
LEFT JOIN parent p ON c.parent_id = p.id
GROUP BY c.id, p.id;

我需要根据实体/父值的值查询 View 。使用 PostgreSQL 它看起来像:

SELECT *
FROM my_view
WHERE (entity_parent).secret_value = 42;

jOOQ 现在正确的数据类型是 entity_parent (ParentRecord),但是我没能翻译我的查询。

有人有想法吗?

最佳答案

jOOQ API 目前不允许生成开箱即用的 UDT 元素解引用表达式。相关的功能请求是这样的: https://github.com/jOOQ/jOOQ/issues/228

但是,与往常一样,您可以使用纯 SQL 模板 API 轻松解决 jOOQ API 中的此类限制: https://www.jooq.org/doc/latest/manual/sql-building/plain-sql-templating

public static <T, U extends UDTRecord> Field<T> dereference(
Field<? extends U> parent,
UDTField<U, T> child
) {
return DSL.field("({0}).{1}", child.getDataType(), parent, child.getUnqualifiedName());
}

然后,按如下方式使用它:

ctx.selectFrom(MY_VIEW)
.where(dereference(MY_VIEW.ENTITY_PARENT, Parent.SECRET_VALUE).eq(42))
.fetch();

关于java - 如何使用 jOOQ 基于复合数据类型构建条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560229/

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