Инструмент для выполнения запросов JPQL? - PullRequest
27 голосов
/ 23 октября 2009

Существует ли какой-либо инструмент, позволяющий выполнять запросы JPQL к базе данных «напрямую»? Я хотел бы вводить JPQL-запросы прямо в окно и выполнять их.

Конечно, мне, вероятно, потребовалось бы немного настроить, чтобы он знал о моих сущностях JPA и т. Д., Но я думаю, что это можно сделать ... Кто-нибудь знает такой инструмент?

Спасибо.

Ответы [ 8 ]

17 голосов
/ 24 октября 2009

Пока Eclipse Dali не получит универсальный редактор JPQL , вы можете использовать Hibernate Tools . Hibernate Tools работает с Dali и предоставляет редактор запросов HQL / JPQL, который использует Hibernate для выполнения запросов.

Альтернативой может быть использование JPA Query Tool [JQT], интерактивного редактора запросов JPA и бегуна. Это может быть ближе к тому, что вы ищете (запускается как отдельное приложение).

alt text

Обновление: Я удалил инструмент, предложенный для NetBeans, проект неактивен и ничего не предоставляет.

10 голосов
/ 19 января 2013

Новости за 2013 год: NetBeans 7.3 будет иметь встроенный инструмент запросов JPQL:

https://blogs.oracle.com/geertjan/entry/test_jpql_with_netbeans_ide

https://blogs.oracle.com/geertjan/resource/run-jpql-query-4.png

3 голосов
/ 23 июля 2010

Похоже, что IntelliJ 10 дополнит редактор HSQL редактором JPQL. (Предполагается, что ветвь 96.xxx - версия 10)

3 голосов
/ 23 июля 2010

Я думаю, что перепробовал все инструменты и IDE.

В итоге я остановился на следующем бите кода ...

queryEditor запускается как UnitTest.

Предполагая, что у вас уже есть UnitTests, вы избегаете хлопот, связанных с настройкой PersistenceContexts, DataSources, драйверов, библиотек и т. Д. ... Он также позволяет передавать экземпляры сущностей в качестве параметров.

И когда вы закончите, скопируйте строку запроса в определение @NamedParameter и установите для @Test значение enable = false.

import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;

import javax.persistence.Query;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class TestGeneric extends AbstractModelTest {

    private static final Logger logger = LoggerFactory.getLogger(TestGeneric.class.getName());

    /**
     * This is not a test.  Just a convenience method to edit queries
     */
    @Test(enabled = true)
    public void queryEditor() throws Exception {
        String query = "SELECT mpe " +
                       "  FROM ActiveProduct apt JOIN apt.supportedProduct spt JOIN apt.account act JOIN act.merchantProfile mpe" +
                       " WHERE mpe.id = :mpeId ";
        Class resultClass = MerchantProfile.class;
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("mpeId", 1L);
        performQuery(query, resultClass, parameters);
    }

    private <T> void performQuery(String jplQuery, Class<T> type, Map parameters) throws Exception {
        Query query = this.em.createQuery(jplQuery, type);

        Set<Map.Entry<String, Object>> rawParameters = parameters.entrySet();
        for (Map.Entry<String, Object> entry : rawParameters) {
            query.setParameter(entry.getKey(), entry.getValue());
        }
        List<T> resultList = query.getResultList();

        if (resultList.size() > 0) {
            int count = 0;
            StringBuffer resultString;
            for (Object o : resultList) {
                resultString = new StringBuffer(++count + " - ");
                dumpObject(o, resultString);
                logger.info(resultString.toString());
            }
        } else {
            logger.info("Empty result list");
        }
    }

    private void dumpObject(Object o, StringBuffer resultString) throws Exception {
        if (o == null) {
            resultString.append("NULL");
        } else if (o instanceof Object[]) {
            Object[] row = (Object[]) o;
            resultString.append("[");
            for (int i = 0; i < row.length; i++) {
                dumpObject(row[i], resultString);
            }
            resultString.append("]");
        } else if (o instanceof Long ||
                   o instanceof Double ||
                   o instanceof String) {
            resultString.append(o.getClass().getName() + ": " + o);
        } else {
            resultString.append(ReflectionToStringBuilder.toString(o, ToStringStyle.SHORT_PREFIX_STYLE));
        }
    }
1 голос
/ 02 мая 2012

Возможно, вы захотите попробовать Vestigo . Это инструмент запросов и браузер, поддерживающий как JDO (JDOQL), так и JPA (JPQL) и может использоваться автономно или установлен в Eclipse IDE в качестве подключаемого модуля.

0 голосов
/ 30 декабря 2011

Мой google-fu создал рабочую ссылку для Jpa Query Tool : http://www.f1cd.ru/soft/base/j/jpa_query_tool/jpa_query_tool_06/jqt-0.6b.zip

0 голосов
/ 02 июля 2010

У вас также есть Hibernate Tool Suite, основанный на NetBeans

0 голосов
/ 23 октября 2009

Проверяли ли вы NetBeans, Eclipse или IntelliJ, что вы хотите?

Особенно с плагином Hibernate для Eclipse, это должно быть возможно (если вы используете Hibernate в качестве вашего внутреннего обработчика JPA).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...