Инструмент для выполнения запросов JPQL?

Используйте каркас журналирования, такой как Log4.

и если вы не довольны результатом, вы можете написать свой собственный Appender, Filter, что угодно, чтобы настроить его, просто напишите. Так что вы могли бы даже сделать некоторое кеширование, чтобы изменить порядок записей, хотя я не говорю, что это хорошая идея.

27
задан Rintoul 23 October 2009 в 19:40
поделиться

5 ответов

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

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

alt text

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

17
ответ дан 28 November 2019 в 05:38
поделиться

Did you check whether NetBeans, Eclipse or IntelliJ do what you want?

Especially with the Hibernate Plugin for Eclipse, this should be possible (if you use Hibernate as your JPA Backend).

0
ответ дан 28 November 2019 в 05:38
поделиться

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

0
ответ дан 28 November 2019 в 05:38
поделиться

Думаю, я перепробовал все инструменты и IDE.

В конце концов, я остановился на следующем фрагменте кода ...

queryEditor работает как UnitTest.

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

И когда вы закончите, скопируйте строку запроса в определение @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));
        }
    }
3
ответ дан 28 November 2019 в 05:38
поделиться

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

3
ответ дан 28 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: