我在使用JPQL语句时遇到问题,我创建了NameQuery:
@NamedQuery(name = "Cart.findExistCart", query = "SELECT c FROM Cart c WHERE c.cartPK.userid = :userid AND c.cartPK.itemid = :itemid "),
无状态bean中的我创建了一个方法来激活这个查询:
public Cart getUserItemCart(int userid,int itemid){
Query query = em.createNamedQuery("Cart.findExistCart");
// query.setParameter("userid", userid);
query.setParameter("itemid", itemid);
query.setParameter("userid", userid);
return (Cart) query.getSingleResult();
}
之后在JSF Managed Bean中我创建了一个方法测试,如果用户ID和项目ID存在于DB中,它会将用户ID和itemid打印到服务器:
public void addtoCart(Items item){
this.items = item;
int userid = getMemberLoginController().getUser().getUserid().intValue();
int itemid = getItems().getItemid().intValue();
if (cartDAO.getUserItemCart(userid, itemid) != null ){
// cart = cartDAO.getUserItemCart(userid, itemid);
cartPk.setUserid(userid);
cartPk.setItemid(itemid);
cart.setCartPK(cartPk);
cart = cartDAO.getUserItemCart(userid, itemid);
System.out.println(cart.getCartQuantity());
}
但是当客户端将项目A添加到数据库中然后将项目B添加到数据库中,并再次将项目A添加到数据库中时,它不会打印项目ID的项目ID,它会打印项目B的项目ID。为什么? 如果我创建select语句findByItemid,它可以很好地工作,如果我按要求它的意思是当点击添加A然后单击添加B,并再次添加A它打印ID 1-2-1,但如果我使用选择语句查找按ItemId和UserId它不起作用,它将打印itemid是1-2-2 它发生了什么?
答案 0 :(得分:1)
你可以删除2行
cartPk.setUserid(userid);
cartPk.setItemid(itemid);
我认为当您指定cart = cartDAO.getUserItemCart(userid, itemid);
userid和itemid有值。