Как в Hibernate создать запрос с параметром?

196
20 июля 2019, 07:10

Всем привет. Изучаю Hibernate, делаю запрос

Scanner scanner = new Scanner(System.in);
em = emf.createEntityManager();
System.out.println("Write min price");
int minPrice = scanner.nextInt();
System.out.println("Write max price");
int maxPrice = scanner.nextInt();
Query query = em.createQuery(
    "select m from Menu m where m.price> :minPrice AND m.price<:maxPrice", Menu.class);
query.setParameter("maxPrice", maxPrice);
query.setParameter("minPrice", minPrice);
List<Menu> menus = query.getResultList();
for (Menu menu: menus){
    System.out.println(menu);
}

В этой строчке программа вылетает. Не могу правильно сделать запрос с параметром - query.setParameter("maxPrice", maxPrice);

Если же без параметра в самом запросе прописать данные то все норм.

Query query = em.createQuery(
    "select m from Menu m where m.price>5 AND m.price<15", Menu.class);
//query.setParameter("maxPrice", "maxPrice");
// query.setParameter("minPrice", "minPrice");
List<Menu> menus = query.getResultList();
for (Menu menu: menus){
    System.out.println(menu);
}

Я так понимаю, что не правильно устанавливаю параметр или прописываю в самом запросе его. В чем проблема?

Вот ошибка:

Exception in thread "main" java.lang.IllegalArgumentException: Parameter value [15] did not match expected type [java.lang.Float (n/a)]
at org.hibernate.jpa.spi.BaseQueryImpl.validateBinding(BaseQueryImpl.java:874)
at org.hibernate.jpa.internal.QueryImpl.access$000(QueryImpl.java:80)
at org.hibernate.jpa.internal.QueryImpl$ParameterRegistrationImpl.bindValue(QueryImpl.java:248)
at org.hibernate.jpa.spi.BaseQueryImpl.setParameter(BaseQueryImpl.java:620)
at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:180)
at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:49)
at HibernateHomework1.App.selectDishesByPrice(App.java:77)
at HibernateHomework1.App.main(App.java:31)
Answer 1

Решил проблему. Может когда-то кому-то поможет или поможет найти ошибку. В коде было int minPrice = scanner.nextInt(); а в базе данных тип поля был float Глупая ошибка

Answer 2

Поменять последовательность строк, так как они идут в Запросе:

[... "select m from Menu m where m.price> :minPrice AND m.price<:maxPrice", 
Menu.class); query.setParameter("minPrice", minPrice); 
query.setParameter("maxPrice", maxPrice);
]  
READ ALSO
Java фризы во время выполнения

Java фризы во время выполнения

Собрал игру нa LibGDX в Eclipse, запускаю и каждые 10± секунд происходит дроп фреймрейта до 5-10 на пару секунд и освобождается 10Мб+ оперативной памятиДумал...

144
Метод equals и ==

Метод equals и ==

Фрагмент кода

160
Финализированные переменные

Финализированные переменные

Когда можно инициализировать final переменную? Может ли final переменная быть аргументом метода? Есть ли у final переменной значение по умолчанию?

144