I donβt think there is anything that does this in one step. But you can do it with a metamodel in JPA2, plus some simple reflection:
private static Set<NamedQuery> findAllNamedQueries(EntityManagerFactory emf) { Set<NamedQuery> allNamedQueries = new HashSet<NamedQuery>(); Set<ManagedType<?>> managedTypes = emf.getMetamodel().getManagedTypes(); for (ManagedType<?> managedType: managedTypes) { if (managedType instanceof IdentifiableType) { @SuppressWarnings("rawtypes") Class<? extends ManagedType> identifiableTypeClass = managedType.getClass(); NamedQueries namedQueries = identifiableTypeClass.getAnnotation(NamedQueries.class); if (namedQueries != null) { allNamedQueries.addAll(Arrays.asList(namedQueries.value())); } NamedQuery namedQuery = identifiableTypeClass.getAnnotation(NamedQuery.class); if (namedQuery != null) { allNamedQueries.add(namedQuery); } } } return allNamedQueries; }
source share