我为dbN中的单个VARCHAR列支持的PhoneNumber类创建了Hibernate UserType。一般来说它工作正常。但现在我需要这样的东西
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]
我该怎么做?
答案 0 :(得分:0)
c.calledNumber
是PhoneNumber
个对象,您正在尝试将其与字符串'%385%'
进行比较。发生的事情就像比较表格和列。
你应该写的是:
String QUERY = "FROM Call c join c.calledNumber pn WHERE pn.number LIKE :myNumber"
;
其中pn.number
字段是java字符串。
答案 1 :(得分:0)
String hql = "FROM Call c WHERE c.calledNumber LIKE concat('%', :param, '%')";
...
query.setParameter("param", "385");
会做。
答案 2 :(得分:-1)
字符串文字内的参数未解析。
您需要使用字符串连接将%s添加到参数值。
你可以尝试:
String QUERY = "FROM Call c WHERE c.calledNumber LIKE :myNumber";
(List<Call>)session.createQuery(QUERY)
.setString("myNumber", "%" + "385" + "%").list();