Критерий ограничения. Как и цифры и даты - PullRequest
3 голосов
/ 27 мая 2011

Я использую Hibernate поверх mySQL.В mySQL вы можете помещать LIKE в запросы даже по числовым (например, двойным) параметрам и датам, например, вы можете написать:

select * from sillytable where field like "3.33%"

, и это будет работать.Проблема в том, что я не могу сделать это по критерию, использующему Restrictions.like, на самом деле он выдает исключение, говорящее о том, что он не может привести String к Date или Double.это?

Ответы [ 4 ]

1 голос
/ 06 июля 2011

Я обнаружил, что единственное хорошее решение, которое сделало то, что я хотел сделать, это использование HQL. Нет четкого способа сделать это в Критериях

0 голосов
/ 01 декабря 2016

Если вы все еще хотите придерживаться Hibernate критериев, используйте Restrictions.sqlRestriction вместо Restrictions.like, как описано ниже:

Restrictions.sqlRestriction(" CAST({alias}.field AS CHAR) LIKE ('%" + number + "%')")
0 голосов
/ 27 мая 2011
Criteria crit;

try {
  crit = session.createCriteria(sillytable.class, "st");
  crit.add(Restrictions.like("field", number + "%"));
}
0 голосов
/ 27 мая 2011

Я думаю, что это на самом деле:

x => 3.33 and x < 3.34

В спящем режиме это:

Restriction.between("field", 3.33, 3.34)

Между определяется как (min <= expr AND expr <= max).Таким образом, верхняя граница должна быть изменена на самое большое значение, начиная с 3.33.(Предостережение: у вас может быть ошибка представления, если верхняя граница не представима и 3.34 представлена ​​с 3.33999 .... Вы пропустите это одно значение, если вы сделаете nextAfter с этой уже действительной границей.)

Restriction.between("field", 3.33, Math.nextAfter(3.34, -Double.MAX_VALUE));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...