查询包含字段组合和声明中的行

时间:2018-08-30 17:07:56

标签: java jooq

在数据库级别,我有一个表 product ,该表具有两列: gtin market 以及其他列。

我想编写一个Java代码,将其转换为以下查询:

select * from product where (gtin, market) IN (('USA', 1), ('CA',2), ('PL', 3), ('CZ, 4))

java代码级别上,我有一个特殊的实体GtinMarket,用于存储这两个gtin和市场价值:

GtinMarket {
    String gtin;
    String market;
}

在代码级别上,我会期望像这样:

using(configuration)
                .select()
                .from(table(PRODUCT_TABLE))
                .where((field(GTIN, Long.class),field(MARKET, Long.class)).in(gtinMarketList))
                .fetch()

经过一番调查,我找不到写这种代码的方法,

真的很感谢您的帮助,

谢谢

1 个答案:

答案 0 :(得分:0)

使用DSL.row(Field, Field)进行类型安全的行值表达式构造:

using(configuration)
    .select()
    .from(table(PRODUCT_TABLE))
    .where(row(field(GTIN, Long.class), field(MARKET, Long.class)).in(gtinMarketList))
    .fetch()

这是假设您的gtinMarketList是相关Row2.in()方法所期望的Collection<? extends Row2<Long, Long>>in()方法有多个重载,因此您可以选择适合自己的任何内容。

更多信息在这里: https://www.jooq.org/doc/latest/manual/sql-building/conditional-expressions/in-predicate-degree-n