hibernate - JPA 中所有 NamedQueries 的列表

标签 hibernate jpa named-query

我想获得我的应用程序中所有 NamedQueries 的列表,并且我还想在运行时一般地调用它们。是否可以选择获取列表以及某种元数据(通常是某种反射)?

另一个线程为 NHibernate 提供了某种解决方案......即使使用 Hibernate 作为实现,也无法在 JPA 中找到类似的解决方案。

提前谢谢
副司令官

最佳答案

我不认为有任何内置的步骤可以做到这一点。但是您可以使用 JPA2 中的元模型来做到这一点,再加上一些简单的反射:

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;
}

关于hibernate - JPA 中所有 NamedQueries 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12614906/

相关文章:

java - JPA EntityManager 未在 struts2 和 JBOSS 7.1 中初始化

java - 使用自然键作为 equals 和 hashCode 的一部分

java - 如何向 Hibernate 过滤器添加大于/小于

java - HQL NamedQuery 在 HashMap 上具有内连接

grails - 动态namedQueries

hibernate - 避免 Grails/Hibernate 中的 N+1 选择

java - 如何全局设置 Hibernate 验证约束的消息?

java - 创建名称为 'entityManagerFactoryBean' 的 bean 时出错

java - 外键无父错误

hibernate 查询仅返回字符串的第一个字符