我正在尝试使用JPA的功能。但我发现了奇怪的事情。 下面的代码用于测试
List<Order> list = em.createQuery("select o from Order o where function('order_status', o.id) = :status")
.setParameter("status", status.name())
.setFirstResult(pageable.getOffset())
.setMaxResults(pageable.getOffset() + pageable.getPageNumber())
.getResultList();
long count = ((BigInteger) em.createQuery("select count(o) from Order o where function('order_status', o.id) = :status")
.setParameter("status", status.name())
.getSingleResult()).longValue();
return new PageImpl(list, pageable, count);
结果是
java.lang.IllegalArgumentException:参数值[ORDER]与期望类型[java.lang.Long(n / a)]不匹配 在org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:54) 在org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:27) 在org.hibernate.query.internal.QueryParameterBindingImpl.validate(QueryParameterBindingImpl.java:90) 在org.hibernate.query.internal.QueryParameterBindingImpl.setBindValue(QueryParameterBindingImpl.java:55) 在org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:486) 在org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:104) 在com.modatool.core.repository.OrderRepositoryImpl.findByStatus(OrderRepositoryImpl.java:108)
但是如果:status不是绑定变量,它运行良好。
List<Order> list = em.createQuery("select o from Order o where function('order_status', o.id) = 'WAITING'")
// .setParameter("status", status.name())
.setFirstResult(pageable.getOffset())
.setMaxResults(pageable.getOffset() + pageable.getPageNumber())
.getResultList();
long count = ((Long) em.createQuery("select count(o) from Order o where function('order_status', o.id) = 'WAITING'")
// .setParameter("status", status.name())
.getSingleResult()).longValue();
return new PageImpl(list, pageable, count);
我使用的hibernate版本是5.2.12.Final。有人,请告诉我为什么会这样。
提前致谢。