【问题标题】:Hibernate session filter with binary UUID/binary param fails具有二进制 UUID/二进制参数的休眠会话过滤器失败
【发布时间】:2022-01-12 02:54:30
【问题描述】:

我正在尝试对包含 UUID 的二进制 (16) 表示的表的查询应用过滤器,但是我收到错误:

java.lang.IllegalArgumentException: Incorrect filter parameter [accountId]
    at org.hibernate.internal.FilterImpl.setParameter(FilterImpl.java:80) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]

我已经尝试过这两个过滤器声明

@FilterDef(name="accountFilter", parameters=@ParamDef( name="accountId", type="binary" ) )
@Filter(name="accountFilter", condition=":accountId = account_id")

@FilterDef(name="accountFilter", parameters=@ParamDef( name="accountId", type="binary" ) )
@Filter(name="accountFilter", condition="UUID_TO_BIN(:accountId) = account_id")

使用 UUID toString 方法调用过滤器:

enableFilter(ACCOUNT_FILTER, "accountId", currentUser.getAccount().getId().toString());

两者都会导致相同的错误。

使用 MySQL 8.0.23 和 Hibernate 5.4.32。该列定义为二进制(16)数据

【问题讨论】:

    标签: mysql hibernate jpa


    【解决方案1】:

    我的 WHERE 子句 UUID 函数失败了。它应该是这样的:

    @FilterDef(name="accountFilter", parameters=@ParamDef( name="accountId", type="string" ) )
    @Filter(name="accountFilter", condition=":accountId = UUID_TO_BIN(account_id)")
    

    将字符串作为过滤器参数传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2013-05-27
      • 2021-06-08
      • 1970-01-01
      相关资源
      最近更新 更多