2009-06-25 96 views
31

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

一个好的安装程序将如何让我从重新部署中解放出来并启用快速查询检查?

回答

14

随着Intellij IDEA 8.1.3选择的机制被称为'Facet'。要立即测试HQL查询:

  1. 创建数据源工具 - >数据源,添加数据源,在确定的情况下驱动程序,用户名和侑发展分贝
  2. 的密码,你不已经一个hibernate.cfg或你可以用不同于xml的方式配置会话工厂:创建一个休眠。cfg文件引用所有XML映射(为会话工厂定义一个名称,只是为了便于处理)
  3. 'Project Structure'将曲面添加到您选择的模块,并将最近定义的数据源分配到新曲面
  4. switch到Java EE查看
  5. 打开休眠刻面 - 节点
  6. 右键单击会话工厂,并选择“打开HQL控制台”
  7. 进入控制台 HQL查询......和your're完成。

对于此RTFM问题感到抱歉。

10

您可以使用hibernate tools in eclipse运行查询。这将允许您在尝试某些操作时运行HQL。

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

太阳有standalone editor,但我没有尝试过。

+0

不存在对IntelliJ IDEA的8溶液(=插件,等等)? – Chris 2009-06-25 13:22:09

+0

我添加了一个链接到Hibero。 – stevedbrown 2009-06-25 14:00:20

+0

是的,thxn。如果它是如何描述它的话,那正是我需要的,但是:“自2008年1月1日起,由于商业原因,Hibero™已经停产。”那么现在呢? – Chris 2009-06-25 14:20:17

3

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

final EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("tacs-test", props); 

    final EntityManager entityManager = entityManagerFactory.createEntityManager(); 

    return (Session)entityManager.getDelegate(); 

最佳 安德斯

3

你说的最快捷的方式,我不知道,如果你打算去得到最快捷的方式,或进行持续的测试,最快的方法,具有一定的初始投资获得测试已实施。这个答案更多的是后者。

我之前完成此操作的方式是使用JUnitDBUnit执行一些简单的集成测试。

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

例如,

建立数据库第一只包含一个固定的一组数据例如,

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

这是东西,你会在你的JUnit测试用例的设置()方法做。

现在让我们假设你有这个实体的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. 
} 
2

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