带有Hibernate UserType的HQL通配符

时间:2015-03-18 09:12:07

标签: hibernate usertype

我为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]

我该怎么做?

3 个答案:

答案 0 :(得分:0)

c.calledNumberPhoneNumber个对象,您正在尝试将其与字符串'%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();