Jooq使用软删除查询表

时间:2019-09-09 14:54:56

标签: java sql jooq

我想编写软删除记录,而不是在jooq中硬删除它们。但是使用软删除查询表呢?

所以我不想写

SELECT id, name FROM users WHERE DELETED=false

但是我只想写

SELECT id, name FROM users 

1 个答案:

答案 0 :(得分:0)

我们目前不支持这种SQL转换,但是您可以使用VisitListener来扩展jOOQ。如本博客文章所述,软删除是行级安全性的一种更简单的情况: https://blog.jooq.org/2015/06/17/implementing-client-side-row-level-security-with-jooq

一种实现方法的示例方法是,如果所有生成的表都有一个DELETED列,则向它们添加接口:

interface SoftDeletable {
    TableField<? Boolean> deleted();
}

然后在您的VisitListener中进行匹配,并添加一个谓词,以防FROM子句包含对此表的引用。然后,您还可以将其用于别名表,派生表等。

我们正在努力在jOOQ 3.13和将来的发行版中改进jOOQ的内部查询对象模型,以使这些用例比VisitListener更易于实现。具体来说,我们的路线图上支持软删除:https://github.com/jOOQ/jOOQ/issues/2683