我想编写软删除记录,而不是在jooq中硬删除它们。但是使用软删除查询表呢?
所以我不想写
SELECT id, name FROM users WHERE DELETED=false
但是我只想写
SELECT id, name FROM users
答案 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