Вступление
 Если вы являетесь Java-разработчиком, использующим JPA, скорее всего, вы объявили один или несколько объектов @NamedQuery на своих объектах. 
  Чтобы объявить @NamedQuery для класса, класс должен быть просто аннотирован именем запроса и его JPQL, например: 
| 1 2 3 4 | @Entity@NamedQuery(name = "findAllProjects",            query = "select p from Project p order by p.id")publicclassProject | 
  Однако, если мы хотим объявить несколько аннотаций @NamedQuery , мы аннотируем класс аннотацией @NamedQueries которая затем содержит коллекцию аннотаций @NamedQuery следующим образом: 
| 1 2 3 4 5 6 7 8 | @Entity@NamedQueries({     @NamedQuery(name = "findAllProjects",                query = "select p from Project p order by p.id"),    @NamedQuery(name = "findById",                query = "select p from Project p where p.id=:id")})publicclassProject | 
Перечисление аннотаций @NamedQuery
  Как только вы создали сущность с несколькими аннотациями @NamedQuery , как вы можете проверить, какие аннотации присутствуют в классе? 
К счастью, используя отражение, довольно просто перечислить аннотации к классу и найти детали о них, как показано в следующем коде.
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | NamedQueries annotation = Project.class.getAnnotation(                                            NamedQueries.class                                                     );for(Annotation annot : annotation.value()) {  System.out.println(annot.toString());  for(Method method : annot.annotationType().getDeclaredMethods()) {    if(method.getName().equalsIgnoreCase("name") ||        method.getName().equalsIgnoreCase("query")) {        try{        String result = method.getName() +                         " : "+                         method.invoke(annot,  null).toString();        System.out.println(result);      } catch(IllegalAccessException | IllegalArgumentException            | InvocationTargetException e) {        // Oops - something has gone wrong.        break;      }    }  }} | 
Выполнение вышеуказанного кода приводит к следующему выводу:
| 1 2 3 4 5 6 7 | @javax.persistence.NamedQuery(lockMode=NONE, hints=[], name=findAllProjects, query=select p from Project p order by p.id)name : findAllProjectsquery : select p from Project p order by p.id@javax.persistence.NamedQuery(lockMode=NONE, hints=[], name=findById, query=select p from Project p where p.id=:id)name : findByIdquery : select p from Project p where p.id=:id | 
| Ссылка: | Перечислите @NamedQuery в @NamedQueries от нашего партнера по JCG Дэвида Солтера в блоге Дэвида Солтера в блоге. |