我们在某个项目的工作场所使用Hibernate,最近我不得不修改一些查询。我发现修改查询,运行ant smart
或ant refresh
并查看我的查询是否有效非常麻烦。当我问我的一位同事时,他告诉我这是我们使用它的方式。
您是否知道如何加快这一过程?我正在寻找一个可以连接到数据库的工具(我们正在使用PGSQL)并在那里运行我的Hibernate查询并在不触及ant的情况下显示结果。
例如,我可以试试这个:
@Query(query = "SELECT DISTINCT l FROM Line l, IN(l.workplaces) w WHERE w.workshop.sid=:wsid", params = "wsid")
答案 0 :(得分:1)
我们有一个junit-test for hibernate,它使用derby database作为内存数据库。这将使用所有表在derby中创建数据库,您应该能够执行查询,以查看它是否有效。
我们在orm.xml中有所有查询,因此在创建EntityManager时已经检查了这些查询。
private static EntityManagerFactory emf;
private static EntityManager em;
@BeforeClass
public static void before()
{
emf = Persistence.createEntityManagerFactory("persistenztest");
em = emf.createEntityManager();
}
@Test public void test()
{
Query q = em.createQuery(YOUR_QUERY_HERE);
List<?> list = q.getResultList();
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="persistenztest" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<mapping-file>orm.xml</mapping-file>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="hibernate.connection.url" value="jdbc:derby:memory:sa;create=true;territory=de_DE;collation=TERRITORY_BASED:SECONDARY;"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
<property name="hibernate.cache.use_query_cache" value="false"/>
<property name="hibernate.cglib.use_reflection_optimizer" value="false" />
</properties>
</persistence-unit>
</persistence>
答案 1 :(得分:1)
用于eclipse的JBoss Tools有一个HQL编辑器,你可以从hibernate的角度打开它,你可以在那里测试hql查询。