首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何验证HQL在语法上是否正确(不执行它)?

如何验证HQL在语法上是否正确(不执行它)?
EN

Stack Overflow用户
提问于 2014-03-21 13:54:27
回答 2查看 1.6K关注 0票数 3

是否有一种简单的方法(通过Java代码)来验证HQL在语法上是否正确?

一种方法当然是执行它并捕获异常。但我希望避免触发查询。

在我的例子中,HQL是根据用户的选择动态生成的,有时用户甚至可以手动输入它。因此,我想验证HQL的格式是否正确。

EN

回答 2

Stack Overflow用户

发布于 2014-03-21 14:07:22

如果您只想确保hql的格式正确,那么建议您将语句包装在一个事务中,然后尝试执行该语句。当然,如果HQL无效,它将抛出一个错误,捕获该异常,然后执行rollback,以防止对数据库进行任何更改。

代码语言:javascript
复制
Session sess = factory.openSession();
Transaction tx;

try {
    tx = sess.beginTransaction();
    //execute the hql. will throw an error if not a valid one
    //...

    //commit if hql is not malformed
    tx.commit();
}
catch (Exception e) {
    if (tx!=null) tx.rollback(); //hql not valid. rollback
    throw e;
}
finally {
    sess.close();
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-21 14:03:32

在我的开发中,有很多EntityOR mappingName queries。他们最简单的方法就是我用Transaction来检查有没有正确的。

我在JPA中的用法如下。我相信也会有HibernateHQL的方法。

代码语言:javascript
复制
public static void main(String args[]) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    em.getTransaction().commit();
    em.close();
    emf.close();
}

Console将显示缺少的状态/错误。如果您开发过程不正确。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22551270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档