使用CriteriaBuilder搜索数据库中的Long值

时间:2014-06-03 16:06:24

标签: java sql database hibernate jpa

我试图在我的数据库中的“订单”表中搜索“订单”,并且我没有找到它,因为get()方法只接受字符串而不是长值。 这是代码:

  public List<OrderItemEntity> findOrderItem(OrderItem orderitem){
    long id = orderitem.getId();
    EntityManager em = emf.createEntityManager();
    try {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<OrderItemEntity> cq = cb.createQuery(OrderItemEntity.class);
        Root<OrderItemEntity> root = cq.from(OrderItemEntity.class);
        cq.where(cb.equal(root.get("id"), String.valueOf(id))); <<---- THIS LINE!!
        TypedQuery query = em.createQuery(cq);
        List<OrderItemEntity> result = query.getResultList();
        System.out.println("orderID found is: " + result.get(0).getId());
        return result;
    } finally {
        em.close();
    }
}

任何人都可以帮忙吗?我怎么能把这个“id”转换成字符串值?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果id是您的主要ID,则可以更轻松地找到您的实体:

OrderItemEntity myitem = em.find(OrderItemEntity.class, id);

或者,在查询中使用select方法,一切都应该正常工作(如果你使用的话,String.valueof就可以了):

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<OrderItemEntity> cq = cb.createQuery(OrderItemEntity.class);
    Root<OrderItemEntity> root = cq.from(OrderItemEntity.class);
    cq.select( root );
    cq.where(cb.equal(root.get("id"), String.valueOf(id))); 
    TypedQuery query = em.createQuery(cq);
    List<OrderItemEntity> result = query.getResultList()