具有Hibernate用户类型的HQL通配符

具有Hibernate用户类型的HQL通配符,hibernate,usertype,Hibernate,Usertype,我已经为PhoneNumber类创建了Hibernate用户类型,该类由db中的单个VARCHAR列支持。一般来说,它工作得很好。但现在我需要这样的东西 String hql = "FROM Call c WHERE c.calledNumber LIKE :param"; ... query.setParameter("param", "%385%"); 以 java.lang.IllegalArgumentException: Parameter value [%385%] did not

我已经为PhoneNumber类创建了Hibernate用户类型,该类由db中的单个VARCHAR列支持。一般来说,它工作得很好。但现在我需要这样的东西

String hql = "FROM Call c WHERE c.calledNumber LIKE :param";
...
query.setParameter("param", "%385%");

java.lang.IllegalArgumentException: Parameter value [%385%] did not match expected type [PhoneNumber]

我如何才能做到这一点?

字符串文本中的参数未解析

您需要使用字符串连接将%s添加到参数值中

你可以试试:

String QUERY = "FROM Call c WHERE c.calledNumber LIKE :myNumber";
(List<Call>)session.createQuery(QUERY)
    .setString("myNumber", "%" + "385" + "%").list();
String QUERY=“FROM Call c,其中c.calledNumber类似于:myNumber”;
(列表)会话。createQuery(查询)
.setString(“myNumber”、“%”+“385”+“%”)列表();

c.calledNumber
是一个
电话号码
对象,您试图将其与字符串
'%385%'
进行比较。发生的事情就像将表与列进行比较

你应该写的是:

String QUERY=“FROM Call c join c.calledNumber pn WHERE pn.number LIKE:myNumber”

其中
pn.number
字段是一个java字符串

String hql = "FROM Call c WHERE c.calledNumber LIKE concat('%', :param, '%')";
...
query.setParameter("param", "385");

我会做这项工作。

对不起,我在简化示例时犯了错误。我更新了问题,现在应该是正确的。