为什么可以';在JPA中实体内的NamedQuery中不能使用元字符*?
我试图在我的实体类BrandMstr中使用以下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
@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完成的操作使用本机查询