为什么可以';在JPA中实体内的NamedQuery中不能使用元字符*?

为什么可以';在JPA中实体内的NamedQuery中不能使用元字符*?,jpa,jpa-2.0,Jpa,Jpa 2.0,我试图在我的实体类BrandMstr中使用以下NamedQuery @NamedQuery(name = "BrandMstr.findAllBrands", query = "SELECT * FROM BrandMstr") 它抛出一个异常javax.ejb.EJBException,该异常带有一个长堆栈跟踪,指示找到了意外标记[*] 当我在本机查询中使用相同的查询时,它可以正常工作,如下所示 Collection<BrandMstr>brands=(Collection&l

我试图在我的实体类BrandMstr中使用以下NamedQuery

@NamedQuery(name = "BrandMstr.findAllBrands", query = "SELECT * FROM BrandMstr")
它抛出一个异常
javax.ejb.EJBException
,该异常带有一个长堆栈跟踪,指示找到了意外标记[*]


当我在本机查询中使用相同的查询时,它可以正常工作,如下所示

Collection<BrandMstr>brands=(Collection<BrandMstr>)
em.createNativeQuery("SELECT * FROM BrandMstr",BrandMstr.class).getResultList());


为什么在NamedQuery中不允许使用元字符
*
,而在NativeQuery中可以使用相同的元字符?此外,我们可以使用NamedQuery执行所有操作,那么为什么使用NativeQuery呢?在哪种特定情况下,应使用NativeQuery?

来自以下Java EE 6文档:

指定Java持久性查询中的静态命名查询 语言

您的查询是本机查询

您应该将其更改为JPQL查询,类似于:

query="SELECT b FROM BrandMstr b"
关于你的第二个问题:

我们可以使用NamedQuery执行所有操作,为什么 NativeQuery


对特定于数据库供应商且无法使用JPQL完成的操作使用本机查询。

来自以下Java EE 6文档:

指定Java持久性查询中的静态命名查询 语言

您的查询是本机查询

您应该将其更改为JPQL查询,类似于:

query="SELECT b FROM BrandMstr b"
关于你的第二个问题:

我们可以使用NamedQuery执行所有操作,为什么 NativeQuery

对特定于数据库供应商且无法使用JPQL完成的操作使用本机查询