Будьте в спящем режиме запрос HQL при помощи подобного оператора

Seu следующее отображение

@Entity
public class User {

    private Integer id;

    @Id;
    private Integer getId() {
        return this.id;
    }

}

Заметьте, что идентификатором является Целое число. Теперь мне нужен этот запрос HQL при помощи подобного оператора

Query query = sessionFactory.getCurrentSession().createQuery("from User u where u.id like :userId");

ATT: IT ПОХОЖ на оператор NOT = (равняется оператору),

Тогда я использую

List<User> userList = query.setParameter("userId", userId + "%").list();

Но не работает, потому что В спящем режиме, жалуется, что IllegalArgumentException произошел, звоня методу get User.id

Даже когда я использую

query.setString("userId", userId + "%");

Это не работает

Что я должен использовать для передачи запроса?

16
задан Arthur Ronald 14 December 2009 в 18:53
поделиться

2 ответа

Согласно ссылке на Hibernate:

str () используется для преобразования числовых или временных значений в читаемую строку

Поэтому, когда я использую

from User u where str(u.id) like :userId

, он отлично работает

29
ответ дан 30 November 2019 в 16:49
поделиться

Что ж, оператор LIKE обычно используется с текстовыми данными, то есть со столбцами VARCHAR или CHAR, и у вас есть числовой столбец id (INTEGER).

Возможно, вы могли бы попробовать отобразить поле id также как строку и использовать это поле в запросе. Это может работать или не работать в зависимости от вашего ядра базы данных. Обратите внимание, что вы должны обрабатывать все обновления через setId () и считать поле idAsString доступным только для чтения.

@Entity
public class User {

    private Integer id;
    private String idAsString;

    @Id;
    private Integer getId() {
        return this.id;
    }

    private void setId(Integer id) {
        this.id = id;
    }

    @Column(name="id", insertable=false, updatable=false)
    private String getIdAsString() {
       return this.idAsString;
    }

    private void setIdAsString(String idAsString) {
       this.idAsString = idAsString;
    }
}

Тогда запрос будет:

Query query = sessionFactory.getCurrentSession().createQuery("from User u where u.idAsString like :userId");
List<User> userList = query.setParameter("userId", userId + "%").list();
7
ответ дан 30 November 2019 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: