JPA как оператор с целым числом - PullRequest
4 голосов
/ 04 апреля 2011

Может кто-нибудь сказать мне, почему это не работает:

criteria.add(cb.like((myentity.<Integer>get("integerid")).as(String.class), "2%"))

Я получаю следующую ошибку:

The object [2%], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[integerid-->MYENTITY.INTEGERID]] with descriptor [RelationalDescriptor(org.example.model.MyEntity --> [DatabaseTable(MYENTITY)])], could not be converted to [class java.lang.Integer]

Является ли единственным решением изменить свойство myinteger на строку в модели, чтобы я мог использовать оператор like?

BR

Ответы [ 4 ]

5 голосов
/ 08 марта 2017

Вот пример того, как он работает с JPA, так что вы можете использовать LIKE с целым числом внутри вашего JPQL.

public List<MyEntity> getMyEntities(String idStr) {
   return entityManager.createQuery("SELECT m FROM MyEntity m WHERE CAST( m.id AS string ) LIKE :idStr")
         .setParameter("idStr", "%" + idStr+ "%").getResultList();
}

Примечание: я протестировал его и работал со мной, я используюJPA 2.1 с провайдером Hibernate.

3 голосов
/ 04 апреля 2011

JPA не поддерживает like () с целыми числами, только строки. Некоторые базы данных поддерживают, например, с целым числом, а другие нет.

EclipseLink должен разрешать использование like () с Integer (при условии, что ваша база данных это поддерживает). Какую версию ты используешь? Может понадобиться использовать> = 2.1. Если в последней версии произойдет сбой, зарегистрируйте ошибку.

Вы также можете преобразовать целое число в строку с помощью функции "CHAR," TO_CHAR "или" CONVERT "в зависимости от вашей базы данных. API критериев поддерживает API функции () для вызова собственной функции.

Обратите внимание, что API as () не предназначен для преобразования из Integer в String, он предназначен для приведения к сущности подкласса.

1 голос
/ 16 мая 2012

Я столкнулся с той же проблемой.Я использую JPA2.0 и EclipseLink 2.3 в качестве реализации.

Столбец codeClient на самом деле является целым числом в моей базе данных.

Аннотация @Convert просто преобразует мой столбец Integer встолбец String.

Таким образом, я могу использовать предикат like над числами.

@Entity
@Table(name="COLIS_SO_VM")
public class Colis implements Serializable {

    ...

    @Convert
    private String codeClient;

    ...
}

Я знаю, что это старый пост, но может ли он помочь кому-то еще!

1 голос
/ 04 апреля 2011

Мое предположение: вы пытаетесь поместить String в integerId, который является целым числом.

Более того, подобное значение для целого числа невозможно.Integer.class.и "2%" целочисленным значением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...