Получить именованную строку запроса в JPA - PullRequest
4 голосов
/ 18 апреля 2011

Я пытаюсь экспортировать все именованные запросы для JPA в файл orm.xml.Я хотел бы получить именованную строку запроса в моей Java-программе для некоторых манипуляционных целей, но JPA, похоже, не предоставляет какой-либо метод, который возвращает именованный запрос в виде строки.Все, что я могу сделать, это createNamedQuery с именем именованного запроса.

Есть ли другой способ обойти эту проблему, чтобы получить именованную строку запроса, такую ​​как Hibernate?Похоже на getSession().getNamedQuery("namedQueryName"); в JPA?

Спасибо, Сону.

Ответы [ 2 ]

13 голосов
/ 18 апреля 2011

Если вам действительно нужно, вы всегда можете получить доступ к классам конкретного провайдера через JPA (с unwrap() в JPA 2.0 или с понижением в предыдущих версиях):

String s = em.createNamedQuery("...")
    .unwrap(org.hibernate.Query.class)
    .getQueryString();
4 голосов
/ 28 июня 2011

да, вы можете использовать самоанализ для получения аннотаций именованных запросов, таких как:

String getNamedQueryCode(Class<? extends Object> clazz, String namedQueryKey) {
    NamedQueries namedQueriesAnnotation = clazz.getAnnotation(NamedQueries.class);
    NamedQuery[] namedQueryAnnotations = namedQueriesAnnotation.value();

    String code = null;
    for (NamedQuery namedQuery : namedQueryAnnotations) {
        if (namedQuery.name().equals(namedQueryKey)) {
            code = namedQuery.query();
            break;
        }
    }

    if (code == null) {
        if (clazz.getSuperclass().getAnnotation(MappedSuperclass.class) != null) {
            code = getNamedQueryCode(clazz.getSuperclass(), namedQueryKey);
        }
    }

    //if not found
    return code;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...