我正在尝试使用以下两种方法查询数据存储区:
方法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();
虽然第一种方法是正确返回结果,但第二种方法总是返回一个空列表。为什么会这样?是否有某种方法可以检查参数是否在查询对象中设置正确?
答案 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();