[英]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.