Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF、JPA应用程序中的SQL查询错误_Java_Jpa - Fatal编程技术网

Java JSF、JPA应用程序中的SQL查询错误

Java JSF、JPA应用程序中的SQL查询错误,java,jpa,Java,Jpa,我的应用程序中的查询有问题。这是执行查询的查询方法: public List<Product> obtainProductListByCategory(String category) { Query query = em.createQuery("SELECT p FROM PRODUCT p WHERE CATEGORY='" + category + "'"); List<Product> ret = query.getResultLi

我的应用程序中的查询有问题。这是执行查询的查询方法:

public List<Product> obtainProductListByCategory(String category)
   {
      Query query = em.createQuery("SELECT p FROM PRODUCT p WHERE CATEGORY='" + category + "'");
      List<Product> ret = query.getResultList();

      if (ret == null)
      {
         return new ArrayList<Product>();
      }
      else
      {
         return ret;
      }
   } 
谢谢你迄今为止的帮助。在这里,我在我的应用程序中发布了另一个查询,该查询工作正常:

   public void removeProduct(Product g)
   {
      Query q = em.createQuery("SELECT x FROM BasketItem x WHERE x.product.name = '" + g.getName() + "'");
      List<BasketItem> bItems = q.getResultList();
      for (BasketItem i : bItems)
      {
         em.remove(i);
      }

      q = em.createQuery("DELETE FROM Product x WHERE x.name = '" + g.getName() + "'");
      q.executeUpdate();
   }
}
public void removeProduct(产品g)
{
Query q=em.createQuery(“从BasketItem x中选择x,其中x.product.name='”+g.getName()+”);
List bItems=q.getResultList();
用于(篮子项目一:比特币)
{
em.remove(i);
}
q=em.createQuery(“从产品x中删除,其中x.name=”“+g.getName()+””);
q、 executeUpdate();
}
}
1)您应该在
FROM
子句中为表指定别名,
SELECT
子句应该包含别名
产品
应为实体

em.createQuery("SELECT p FROM Product p WHERE p.category='" + category + "'");   
如果
PRODUCT
不是实体,则应创建
nativeQuery

em.createNativeQuery("SELECT p FROM PRODUCT p WHERE p.CATEGORY='" + category + "'");  
用于JPQL(Java持久性查询语言)
是SQL的

2) 当JPA无法找到您的实体类时,JPA抛出
“未知抽象模式类型”
错误
还要将实体添加到persistence.xml

 <persistence-unit ...>
        <class>com.package.Product</class>  

刚刚编辑了我的问题,并将代码更改为您建议的代码。我现在收到一个新错误。@JeanCarlosSuárezMarranzini是
产品
实体吗?添加
Product
classIt最好使用命名参数添加参数,而不是像这样简单地添加它们的值。请注意,这些漏洞使您的应用程序容易受到SQL注入攻击。@当JPA无法找到您的实体时,JeanCarlosSuárezMarranzini JPA将抛出
“未知抽象架构类型”
错误class@JeanCarlosSuárezMarranzini可能使用区分大小写的语法分析器。尝试
从产品p中选择p,其中p.category=”…
而不是大写请不要删除旧问题,否则尝试解决该问题的答案将无效。只需将相关信息添加到特定问题。@LuiggiMendoza这是真的,谢谢你的建议
 <persistence-unit ...>
        <class>com.package.Product</class>  
SELECT p FROM Product p WHERE p.category = '...