如何在jOOQ中结合嵌入式类型(Embeddable)使用谓词?
在jOOQ中使用嵌入式类型进行谓词比较的可行性
完全可以在jOOQ中这样使用嵌入式类型做谓词比较,这正是jOOQ嵌入式类型设计的核心场景之一。
关键说明:
jOOQ会自动将嵌入式类型的比较拆解为对应字段的组合逻辑。比如你写的
PRODUCT.CREATETIMESTAMP.gt(record),jOOQ会生成类似以下的SQL:WHERE (CreateDate > ?) OR (CreateDate = ? AND CreateTime > ?)这完全符合拆分时间戳的自然比较逻辑——先比较日期,日期相同时再比较时间。
注意构造
CreatetimestampRecord时的参数类型匹配:- 你的
CreateDate是Date类型,应该传入LocalDate而非LocalDateTime,避免类型不匹配错误; CreateTime是HHmmss格式的数值,要确保是6位整数(比如123456对应12:34:56),如果是5位的12345会被解析为01:23:45,需根据业务场景确认格式。
- 你的
修正后的示例代码:
// 构造符合类型要求的阈值记录 CreatetimestampRecord threshold = new CreatetimestampRecord( LocalDate.now(), // 对应Date类型的CreateDate字段 123456 // 对应HHmmss格式的CreateTime字段(12:34:56) ); // 执行查询 create.select(PRODUCT.ID) .from(PRODUCT) .where(PRODUCT.CREATETIMESTAMP.gt(threshold)) .fetch();
如果需要自定义嵌入式类型的比较逻辑,也可以通过jOOQ代码生成器的配置扩展,但默认的组合比较逻辑已经能满足绝大多数拆分时间戳的查询需求。
内容的提问来源于stack exchange,提问作者Conner
相关产品推荐
相关产品推荐

