具有Hibernate用户类型的HQL通配符
我已经为PhoneNumber类创建了Hibernate用户类型,该类由db中的单个VARCHAR列支持。一般来说,它工作得很好。但现在我需要这样的东西具有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
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");
我会做这项工作。对不起,我在简化示例时犯了错误。我更新了问题,现在应该是正确的。