Hibernate 过滤器默认条件不起作用

Hibernate filter default condition is not working

我正在尝试集成过滤器以根据登录用户角色附加 SQL,但看起来默认条件不起作用。

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "ASSET_TYPE")
@FilterDef(name="PartnerFilter",
        parameters=@ParamDef( name="isDomainRelevant", type="boolean" ), defaultCondition = "isDomainRelevant= true")
@Filter(name = "PartnerFilter")
public class AssetTypeEntity implements IdEntity<UUID> {

启用过滤器的休眠代码:

            Session session = ((EntityManager) retVal).unwrap(Session.class);
            session.enableFilter("PartnerFilter");

上面的代码抛出一个异常,说 isDomainRelevant 没有设置,但如果明确设置它,那么它的工作方式类似于下面

            Session session = ((EntityManager) retVal).unwrap(Session.class);
            session.enableFilter("PartnerFilter").setParameter("isDomainRelevant", true);

问题是我们不应该在@ParamDef( name="isDomainRelevant", type="boolean" ) 中定义变量,如果定义了变量那么它认为我们想要动态提供它们。所以参数的默认条件和定义是相互独立的。我们不需要定义我们在默认情况下使用的参数。事实上我们在默认条件下写的是一个原生的 sql 查询。

以下配置效果很好

@FilterDef(name="PartnerFilter",
    defaultCondition = "isDomainRelevant= true")