Я пытаюсь использовать следующий NamedQuery в моей сущности класса BrandMstr.
@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 - это объект EntityManager, аннотированный определенным PersistanceContext следующим образом
@PersistenceContext(unitName="OnlineShoppingCartSystem-ejbPU")
EntityManager em=null;
Почему метасимвол *
не разрешен в NamedQuery, а то же самое можно использовать в NativeQuery? Кроме того, мы можем выполнять все большинство всех операций, используя NamedQuery, тогда почему NativeQuery? В какой конкретной ситуации следует использовать NativeQuery?