繁体   English   中英

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

[英]How to build a condition based on a composite data type with jOOQ?

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

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;

我需要基于实体/父值的值查询视图。 使用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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM