具有二进制 UUID/二进制参数的休眠会话过滤器失败
Posted
技术标签:
【中文标题】具有二进制 UUID/二进制参数的休眠会话过滤器失败【英文标题】:Hibernate session filter with binary UUID/binary param fails 【发布时间】: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)数据
【问题讨论】:
【参考方案1】:我的 WHERE 子句 UUID 函数失败了。它应该是这样的:
@FilterDef(name="accountFilter", parameters=@ParamDef( name="accountId", type="string" ) )
@Filter(name="accountFilter", condition=":accountId = UUID_TO_BIN(account_id)")
将字符串作为过滤器参数传递。
【讨论】:
以上是关于具有二进制 UUID/二进制参数的休眠会话过滤器失败的主要内容,如果未能解决你的问题,请参考以下文章