首页 > 解决方案 > Jooq 使用软删除查询表

问题描述

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

所以我不想写

SELECT id, name FROM users WHERE DELETED=false

但相反,我只想写

SELECT id, name FROM users 

标签: javasqljooq

解决方案


我们目前不支持这种开箱即用的 SQL 转换,但您可以使用VisitListener. 软删除是一个更简单的行级安全案例,如本文所述: https ://blog.jooq.org/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


推荐阅读