是否有一种简单的方法(通过Java代码)来验证HQL在语法上是否正确?
一种方法当然是执行它并捕获异常。但我希望避免触发查询。
在我的例子中,HQL是根据用户的选择动态生成的,有时用户甚至可以手动输入它。因此,我想验证HQL的格式是否正确。
发布于 2014-03-21 14:07:22
如果您只想确保hql的格式正确,那么建议您将语句包装在一个事务中,然后尝试执行该语句。当然,如果HQL无效,它将抛出一个错误,捕获该异常,然后执行rollback,以防止对数据库进行任何更改。
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();
}
发布于 2014-03-21 14:03:32
在我的开发中,有很多Entity
、OR mapping
和Name queries
。他们最简单的方法就是我用Transaction
来检查有没有正确的。
我在JPA
中的用法如下。我相信也会有Hibernate
和HQL
的方法。
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
将显示缺少的状态/错误。如果您开发过程不正确。
https://stackoverflow.com/questions/22551270
复制相似问题