在我看来,我有一列引用另一个表作为其数据类型:
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现在提供了正确的object_parent(ParentRecord)数据类型,但是我无法翻译查询。
有人有主意吗?
答案 0 :(得分:0)
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();