执行JPQL查询的工具?

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

当然,它可能需要我做相当多的配置,以便它能够知道我的JPA实体等,但我想它可以做到……任何人都知道这样的工具?

谢谢。

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

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

替代文字

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

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

我想我尝试了所有的工具和IDE。

最后,我接下来的代码……

queryEditor作为UnitTest运行。

假设您已经拥有UnitTests,您可以避免配置PersistenceContexts,DataSources,Drivers,库等麻烦……它还可以让您将Entity实例作为参数传递。

完成后,将query-String复制到@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 parameters = new HashMap(); parameters.put("mpeId", 1L); performQuery(query, resultClass, parameters); } private  void performQuery(String jplQuery, Class type, Map parameters) throws Exception { Query query = this.em.createQuery(jplQuery, type); Set> rawParameters = parameters.entrySet(); for (Map.Entry entry : rawParameters) { query.setParameter(entry.getKey(), entry.getValue()); } List 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)); } } 

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

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

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

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

您还拥有基于NetBeans的Hibernate Tool Suite

我的google-fu已经为Jpa查询工具提供了一个工作链接: http : //www.f1cd.ru/soft/base/j/jpa_query_tool/jpa_query_tool_06/jqt-0.6b.zip