当与JPA一起工作时,不工作

时间:2017-12-23 14:23:23

标签: java hibernate jpa orm jpql

我正在尝试使用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。有人,请告诉我为什么会这样。

提前致谢。

0 个答案:

没有答案