Почему я получаю «Значение параметра [appa] не соответствует ожидаемому типу [java.lang.Целое число (n / a)]»?

#java #hibernate

#java #спящий режим

Вопрос:

Я не понимаю, почему я получаю эту ошибку. Мне кажется, что все правильно. Ниже приведены мои определения классов:

 @Entity
@Table(name = "product")
public class Product implements Comparable<Product>, java.io.Serializable {
//...

    protected Department department;
//...
}

public class Department implements Serializable {

    private String id;
//...
    @Id
    @Column(name = "id")
    public String getId() {
    return id;
}
}
 

и мой HQL:

 @SuppressWarnings("unchecked")
public List<Product> findProductsByDepartment(final String deptId, String final int limit) {

    return entityManager
            .createQuery(
                    "select i from Product i left join ... where ... and i.department.id = :deptId").setParameter("deptId", deptId).setMaxResults(limit).getResultList();
}
 

Стек исключений указывает на оператор setParameter(«DeptID», DeptID). Тип @Id может быть String (http://docs.oracle.com/javaee/6/api/javax/persistence/Id.html ). Я не знаю, почему он ожидает целое число.

Ответ №1:

Проверьте свою таблицу продуктов (в вашей базе данных), потому что ваше поле id должно быть числовым полем (я полагаю). Вы отображаете его как строку, поэтому вы должны изменить его тип на Integer:

 private Integer id;
//...

@Id
@Column(name = "id")
public Integer getId() {
    return id;
}
 

Комментарии:

1. Исключение относится к отделу, но не к продукту. Я забыл упомянуть, что поле в таблице БД определяется как varchar(4) как CREATE TABLE vsm_department (изменение символа идентификатора (4) НЕ NULL, … }