尽管我在互联网上搜索了很多并阅读了很多文章,但我仍然无法区分 Single_Table 策略和 VPD 策略 的EclipseLink 即可。
起初我认为“VPD”是“独立数据库策略”的实现,但后来我发现我们在两种策略中对所有租户使用相同的表。
有人可以澄清这两种策略之间的区别吗?
答案 0 :(得分:2)
主要区别在于过滤完成的级别。
使用SINGLE_TABLE
多租户时,EclipseLink负责在所有生成的查询中包含tenant_id
。
使用VPD
时,过滤在数据库级别完成。因此,EclipseLink将生成不包含tenant_id
的SQL查询,数据库将负责过滤。
VPD允许用户将自己标识为特定用户,并且能够“查看”特定于该用户的数据。所有结果限制都在数据库级别完成,无需发送包含其他比较的特殊SQL。