如何在 Grails 4 中添加休眠过滤器

How to add hibernate filter in Grails 4

我想为特定域添加全局休眠过滤器,以使我的查询尽可能干净。

在以前的项目中,我使用的是 grails-hibernate-filter 插件,但对于最新的 GORM 版本,它不是 working/available。

如何手动将 hibernate fiter 添加到特定域 class?

我找不到相关的文档。

根据评论补充:

当前应用程序已经使用基于鉴别器的多租户来支持多租户。现在我需要进一步区分每个租户。

以这个例子域为例:

class Vehicle implements MultiTenant<Vehicle> { 
    String manufacturer
    String color

    static mapping = {
        tenantId name:'manufacturer'  
    }
}

目前用户刚刚为其租户获取所有车辆。 现在我想提供一种方法,让用户可以为其租户获得车辆和特定颜色。我不想为每个查询添加颜色条件。相反,我想向 Vehicle 添加一个休眠过滤器。使用休眠插件我可以做类似的事情:

static hibernateFilters = {
    colorFilter(condition: 'color = :color', types: 'string')
}

我在升级过程中遇到了同样的情况。我评估了使用各种补丁将 grails-hibernate-filter 插件变为现实的选项,但感觉就像死胡同。

因为我主要使用 multi-tenancy 的插件,Grails built-in 对 multi-tenancy 的支持在一些迂回之后提供了一个很好的替代品。

如果您的 use-case 不同(比添加的租户 ID 更复杂),您可能需要查看 Grails 3+ 中查询的 DRY 重用。在我决定使用 pure multi-tenancy.

之前,我在那个方向做了一些研究

我没有尝试手动添加休眠过滤器,而是找到了与 Grails 4 一起使用的 grails-hibernate-filter 插件的 fork

似乎按预期工作。至少满足我目前的要求。