如何在jooq中为每个查询添加动态ID

时间:2018-03-21 20:09:04

标签: java sql jooq

我正在使用Jooq 3.10。我想为每个选择,更新和删除查询添加带动态值的默认条件。

示例1:

select * from table_name;

select * from table_name where org_id = dynamic_value

示例2:

select * from table_name where column_name = value;

select * from table_name where column_name = value and org_id = dynamic_value

我如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

使用jOOQ解决此问题

这看起来像行级安全性的情况,可以使用VisitListener实现,如下所述: https://blog.jooq.org/2015/06/17/implementing-client-side-row-level-security-with-jooq

具体实现过于复杂,无法在Stack Overflow上重现,但如果您正在寻找仅限jOOQ的解决方案,那么它正是您所需要的。

使用SQL

解决此问题

并非所有数据库都支持此功能,但值得一提:

更彻底的解决方案是使用SQL视图或表值函数,并将相关谓词直接添加到这些视图或函数中。

  • 在使用视图的情况下,您必须使用Oracle的SYS_CONTEXT函数,在事务开始时使用相关的dynamic_value初始化JDBC连接。
  • 在使用表值函数的情况下,您可以将dynamic_value直接传递给该函数,该函数然后在基础表上运行查询,添加谓词。

在上述两种情况下,您都必须确保不直接向表格提供任何授权,而只是向视图提供。