当前位置: 首页 > 知识库问答 >
问题:

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

赖运珧
2023-03-14
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;
SELECT *
FROM my_view
WHERE (entity_parent).secret_value = 42;

有人有主意吗?

共有1个答案

仉臻
2023-03-14

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();
 类似资料:
  • 问题内容: 我是Kotlin的新手,正在玩数据类型。我选择了一个类型,然后尝试通过说来将其强制转换为a ,这在Java中是有效的(从语法上讲,但这是正确的)。但是,此操作失败,表示无法将Int强制转换为Double。我假设这是因为它是基于Integer类而不是原始的int数据类型构建的。我是正确的,最有价值的方法是什么?有一个功能,但这似乎效率低下且笨拙。 问题答案: 我花了一个类型,然后试图将它

  • 我是科特林的新手,我在玩数据类型。我取了一个<code>Int</code>类型,然后尝试将其转换为<code>Double</code>,将<code>num表示为Double>/code,这是一个在java中有效的调用(非语法上,但你明白了)。然而,这失败了,表示Int不能强制转换为Double。我假设这是因为它是基于Integer类而不是原始int数据类型构建的。我说得对吗?什么是最有效的价

  • 我有一个现有的C#泛型类,希望根据使用的类型添加或删除一个方法,我解释道 对于特定的

  • 长话短说:java.io包中有多少种基于数据流的流?它们是字节流和字符流还是二进制流和字符流? 完整问题: https://youtu.be/v1_ATyL4CNQ?t=20m5s昨天看了本教程后跳到20:05,我的印象是基于数据流有两种类型的流:BinaryStreams和CharacterStreams。今天,在了解了更多关于这个主题的知识之后,我的新发现似乎与旧发现相矛盾。 互联网上的大多数

  • 我试图用JOOQ生成这个简单的SQL,但由于某些原因,我无法完成。 我以为会是这样 不幸的是,MySQLDataType已被弃用()。所以我试过了 但是我得到了以下SQL,这是不合法的。 有什么提示吗?

  • 默认情况下,Android Plugin 会自动给项目构建 debug 和 release 版本。两个版本的区别在于能否在安全设备(非 dev)上调试,以及 APK 如何签名。debug 使用通过通用的 name/password 对生成的密钥证书进行签名(为了防止在构建过程中出现认证请求)。release 在构建过程中不进行签名,需要自行签名。 这些配置是通过 BuildType 对象来完成的。