如何确定实体是否具有NamedQuery

时间:2012-10-18 15:59:42

标签: java jpa reflection annotations named-query

再次,基于a problem I had the other day发布和回答问题以造福他人。希望这能节省一些时间。我有点意外,这并没有内置到JPA的EntityManager

如何确定实体是否包含具有特定名称的NamedQuery注释?

在尝试执行实体之前,我需要确定实体是否具有特定的@NamedQuery

1 个答案:

答案 0 :(得分:1)

当嵌套注释时,您可以获取注释的属性以获取它的子项。在@NamedQueries的情况下,它是.value()

public boolean hasNamedQuery(Class<?> clazz, String nameOfQuery) {
    boolean foundQueryByName = false;
    NamedQueries namedQueries = clazz.getAnnotation(NamedQueries.class);
    if (namedQueries != null && namedQueries.value() != null) {
        NamedQuery[] values = namedQueries.value();
        for (int i = 0; i < values.length && !foundQueryByName; i++) {
            foundQueryByName |= (nameOfQuery.equals(values[i].name()));
        }
    }
    return foundQueryByName;
}