【问题标题】:How to test HQL queries?如何测试 HQL 查询?
【发布时间】:2010-11-05 19:48:53
【问题描述】:

我正在寻找一种快速(非常快)的方法来测试对休眠查询的更改。我有一个巨大的应用程序,其中包含数千个不同的 HQL 查询(在 XML 文件中)和 100 多个映射类,我不想重新部署整个应用程序来测试查询的一个微小变化。

一个好的设置如何让我免于重新部署并启用快速查询检查?

【问题讨论】:

    标签: java hibernate testing hql environment


    【解决方案1】:

    您可以使用hibernate tools in eclipse 运行查询。这将允许您在任何时候尝试运行 HQL。

    如果您使用的是 IntelliJ,则有 Hibero

    有一个来自sun的standalone editor,但我没试过。

    【讨论】:

    • 是否存在适用于 IntelliJ IDEA 8 的解决方案(=插件等)?
    • 是的,谢谢。如果它按他们的描述工作,那正是我所需要的,但是:“自 2008 年 1 月 1 日起...... Hibero™ 因商业原因已停产。”,那么现在呢?
    • 我想我会删除那个书签,有一段时间没有使用 IntelliJ(不是选择,只是预算)。
    • 我没有足够的代表来编辑帖子,但 Hibernate Tools 的正确 URL 是:hibernate.org/subprojects/tools.html
    • @stevedbrown :独立编辑器的链接已损坏。请更新一下好吗?
    【解决方案2】:

    在日食中

    1. 安装 Hibernate 工具(Jboss)
    2. 切换到休眠视角
    3. 打开/单击休眠配置窗口
    4. Rt 点击窗口并添加配置
    5. Rt 点击窗口点击/打开 HQL 编辑器
    6. 键入并执行您的 HQL 查询,并在 Hibernate 查询结果窗口中获取您的结果

    点击此链接了解更多信息http://docs.jboss.org/tools/OLD/2.0.0.GA/hibernatetools/en/html/plugins.html

    【讨论】:

      【解决方案3】:

      我写了一个简单的工具来测试和预览HQL,这只是一个带有main方法的java类。

      你可以在这里找到代码:https://github.com/maheskrishnan/HQLRunner

      这是屏幕截图...

      【讨论】:

        【解决方案4】:

        在 eclipse Market 中,您可以搜索 JBoss Tools 并从给定列表中仅选择 Hibernate 工具。

        【讨论】:

          【解决方案5】:

          在 Intellij IDEA 8.1.3 中,选择的机制称为“Facet”。即时测试 HQL 查询:

          1. 创建数据源工具->数据源,添加数据源,定义你的开发数据库的驱动,用户名和密码
          2. 如果您还没有 hibernate.cfg 或者您以不同于通过 xml 的方式配置会话工厂:创建一个引用所有 XML 映射的 hibernate.cfg 文件(为会话工厂定义一个名称,只是为了便于处理)
          3. 在“项目结构”中将 Facet 添加到您选择的模块中,并将最近定义的数据源分配给新的 facet
          4. 切换到 Java EE 视图
          5. 打开 Hibernate Facets - 节点
          6. 右键单击会话工厂并选择“打开 HQL 控制台”
          7. 在控制台中输入 HQL 查询 ...你就完成了。

          很抱歉这个 RTFM 问题。

          【讨论】:

          【解决方案6】:

          您说的是最快的方式,我不确定您是指最快的开始方式,还是执行持续测试的最快方式,需要一些初始投资来实施测试。这个答案更多的是后者。

          我之前的做法是使用JUnitDBUnit 实现一些简单的集成测试。

          本质上,您将使用 DBUnit 使用一组已知且具有代表性的数据设置您的测试数据库,然后使用纯 JUnit 来执行包含您的 HQL 查询的方法,并验证结果。

          例如,

          首先将您的数据库设置为仅包含一组固定的数据,例如,

          Product Name, Price
          Acme 100 Series Dynamite, $100
          Acme 200 Series Dynamite, $120
          Acme Rocket, $500
          

          这是您在 JUnit 测试用例的 setup() 方法中要做的事情。

          现在让我们假设您有一个用于该实体的 DAO,并且有一个“findProductWithPriceGreaterThan(int)”方法。在您的测试中,您会执行以下操作:

          public void testFindProductWithPriceGreaterThanInt() {
              ProductDAO dao = new HibernateProductDAO();
              //... initialize Hibernate, or perhaps do this in setup()
          
              List products = dao.findProductWithPriceGreaterThan(110);
              assertEquals(2, products.size());
              //... additional assertions to verify the content of the list.
          }
          

          【讨论】:

          • 快速/快速我的意思是'change-test-change-test' ...迭代。
          • @Chris 一旦你有了一个用于 DBunit 测试的基类,你就可以在不到一分钟的时间内编写测试方法并且它们运行几秒钟。不如带有大“运行”按钮的专用查询编辑器快,但 DBUnit 测试的好处是您可以保存它们并将它们用作回归测试。我个人使用 Eclipse Hibernate Tools 进行初始 try'n'error 和 DBUnit 一旦它工作。
          【解决方案7】:

          我使用 HSQLDB 数据库在单元测试中测试我的 HQL 查询。只需创建一个实体管理器,将其转换为休眠会话并查询即可。

              final EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("tacs-test", props);
          
              final EntityManager entityManager = entityManagerFactory.createEntityManager();
          
              return (Session)entityManager.getDelegate();
          

          最好的 安德斯

          【讨论】:

            猜你喜欢
            • 2013-05-29
            • 2012-05-04
            • 2014-03-19
            • 2017-07-27
            • 2016-01-17
            • 2012-05-28
            • 2012-12-14
            • 2011-08-21
            • 2021-11-07
            相关资源
            最近更新 更多