【发布时间】:2011-12-20 22:31:43
【问题描述】:
我正在尝试在我的 entity 类 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());
其中 em 是使用特定 PersistanceContext 注释的 EntityManager 对象,如下所示
@PersistenceContext(unitName="OnlineShoppingCartSystem-ejbPU")
EntityManager em=null;
为什么在 NamedQuery 中不允许使用元字符 * 而在 NativeQuery 中可以使用元字符?此外,我们可以使用 NamedQuery 执行所有大多数操作,那么为什么选择 NativeQuery?在什么特殊情况下应该使用 NativeQuery?
【问题讨论】: