1

我已经为我的 PhoneNumber 类创建了 Hibernate UserType,该类由 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]

我怎样才能做到这一点?

4

3 回答 3

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

将完成这项工作。

于 2019-09-19T16:17:07.010 回答
0

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

你应该写的是这样的:

String QUERY = "FROM Call c join c.calledNumber pn WHERE pn.number LIKE :myNumber";

其中pn.number字段是 java 字符串。

于 2017-06-08T19:15:03.677 回答
-1

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

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

你可以试试:

String QUERY = "FROM Call c WHERE c.calledNumber LIKE :myNumber";
(List<Call>)session.createQuery(QUERY)
    .setString("myNumber", "%" + "385" + "%").list();
于 2015-03-18T10:26:11.520 回答