web-dev-qa-db-ja.com

JPQLクエリを実行するツール?

「直接」データベースに対してJPQLクエリを実行できるツールはありますか? JPQLクエリをウィンドウに直接入力して実行します。

もちろん、おそらくJPAエンティティーなどを認識するために、かなりの構成を行う必要がありますが、それは可能だと思います...そのようなツールを知っている人はいますか?

ありがとう。

27
Rintoul

Eclipse Daliが 汎用JPQLエディター を取得するまで、 Hibernate Tools を使用できます。 HibernateツールはDaliと連携し、Hibernateを使用してクエリを実行するHQL/JPQLクエリエディターを提供します。

別の方法は、インタラクティブなJPAクエリエディターおよびランナーである JPAクエリツール [JQT]を使用することです。探しているものに近いかもしれません(スタンドアロンアプリケーションとして実行されます)。

alt text

更新:NetBeansのために提案されたツールを削除しました。プロジェクトは非アクティブで何も提供していません。

17
Pascal Thivent

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

10
Ondra Žižka

私はすべてのツールと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<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
Jan

IntelliJ 10はHSQLエディターをJPQLエディターで補完するように見えます。 (ブランチ96.xxxがバージョン10であると想定)

3
Jan

また、NetBeansに基づく Hibernate Tool Suiteもあります。

0
Miguel Ping

NetBeans、Eclipse、またはIntelliJが希望どおりに機能するかどうかを確認しましたか?

特にEclipse用のHibernateプラグインを使用すると、これが可能になるはずです(JPAバックエンドとしてHibernateを使用している場合)。

0
shartte

ぼくの google-fuには、Jpaクエリツールのリンクが作成されています: http://www.f1cd.ru/soft/base/ j/jpa_query_tool/jpa_query_tool_06/jqt-0.6b.Zip

0
Miguel Ping

Vestigo を試してみてください。これは、JDO(JDOQL)とJPA(JPQL)の両方をサポートするクエリツールとブラウザであり、スタンドアロンで使用することも、EclipseにインストールすることもできますIDEプラグインとして。

0
Marco