通过将参数设置为查询对象的JPA查询返回空列表

时间:2014-08-22 09:36:27

标签: google-app-engine jpa

我正在尝试使用以下两种方法查询数据存储区:

方法1 :查询字符串中的硬编码参数值:

 String queryString="SELECT b FROM Item AS b WHERE b.categoryId=4";
 Query q = mgr.createQuery(queryString);
 List<Item> itemList = (List<Item>) q.getResultList();

方法2 :将参数设置为查询对象:

 String queryString="SELECT b FROM Item AS b WHERE b.categoryId=:catId";
 Query q = mgr.createQuery(queryString);
 String parameterValue="4";
 q.setParameter("catId", parameterValue);
 List<Item> itemList = (List<Item>) q.getResultList();

虽然第一种方法是正确返回结果,但第二种方法总是返回一个空列表。为什么会这样?是否有某种方法可以检查参数是否在查询对象中设置正确?

2 个答案:

答案 0 :(得分:0)

如果您想根据categoryId获取记录,请使用以下方法

public Item getItemByCategoryId(String categoryId) {
    Item item = null;
    try {
        item = mgr.find(Item.class, categoryId); // for single record
    } catch (Exception e) {
        e.printStackTrace();
    }
    return item;
}

根据categoryId获取所有记录

// for all the records which are mapped by categoryId
public List<Item> getItemListByCategoryId(String categoryId) {
    List<Item> itemsList = null;
    try {
        String sqlQuery = "SELECT b FROM Item AS b WHERE b.categoryId=:catId";
        Query query = mgr.createQuery(sqlQuery);
        query.setParameter("catId", categoryId);
        itemsList = query.getResultList();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return itemsList;
}

答案 1 :(得分:0)

如果参数是一个数字,为​​什么要使用String?

尝试:

String queryString="SELECT b FROM Item AS b WHERE b.categoryId=:catId";
Query q = mgr.createQuery(queryString);
Integer parameterValue=4;
q.setParameter("catId", parameterValue);
List<Item> itemList = (List<Item>) q.getResultList();