29

是否有任何可用的工具允许“直接”对数据库执行 JPQL 查询?我想直接在窗口中输入 JPQL 查询并执行它们。

当然,它可能需要我做相当多的配置,以便它知道我的 JPA 实体等,但我想它可以完成......有人知道这样的工具吗?

谢谢。

4

8 回答 8

17

在 Eclipse Dali 获得通用 JPQL 编辑器之前,您可以使用Hibernate Tools。Hibernate Tools 与 Dali 一起工作,并提供了一个 HQL/JPQL 查询编辑器,它使用 Hibernate 来执行查询。

另一种方法是使用JPA 查询工具[JQT],这是一个交互式 JPA 查询编辑器和运行程序。它可能更接近您正在寻找的内容(作为独立应用程序运行)。

替代文字

更新:我删除了为 NetBeans 建议的工具,该项目处于非活动状态并且不提供任何东西。

于 2009-10-23T20:24:58.213 回答
10

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

于 2013-01-19T10:57:31.253 回答
4

我想我尝试了所有的工具和 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));
        }
    }
于 2010-07-23T12:43:30.377 回答
3

看起来 IntelliJ 10 将使用 JPQL 编辑器来补充 HSQL 编辑器。(假设分支 96.xxx 是版本 10)

于 2010-07-23T13:22:39.970 回答
0

您是否检查过 NetBeans、Eclipse 或 IntelliJ 是否符合您的要求?

特别是对于 Eclipse 的 Hibernate 插件,这应该是可能的(如果您使用 Hibernate 作为您的 JPA 后端)。

于 2009-10-23T19:42:53.193 回答
0

google-fuJpa 查询工具提供了一个工作链接:http ://www.f1cd.ru/soft/base/j/jpa_query_tool/jpa_query_tool_06/jqt-0.6b.zip

于 2011-12-30T16:34:12.287 回答
0

您还拥有基于 NetBeans 的Hibernate Tool Suite

于 2010-07-02T11:40:45.460 回答
0

您可能想尝试Vestigo。它是一个同时支持 JDO (JDOQL) 和 JPA (JPQL) 的查询工具和浏览器,可以单独使用,也可以作为插件安装到 Eclipse IDE 中。

于 2012-05-01T20:04:08.290 回答