微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何以编程方式验证JPQL(JPA查询)

我正在寻找一种以编程方式验证JPA查询方法.

在(Spring)事务中,我有一个要运行的查询列表.这些查询可能包含我想要捕获的语法错误,以便事务可以继续.

我的第一个想法是使用EntityManager并创建并执行我的查询,如果它们失败,那么我可以简单地捕获异常,记录警告并继续.

问题是,当出现问题时,事务被标记为rollbackOnly,因此我的当前事务被回滚,这不是我想要的.

在伪代码中,它或多或少像这样:

EntityManager em = ...;
  em.getTransaction().begin();
  List<String> queries = Arrays.asList("select e from Department d","select d from Department d");
  for(String query:queries) {
       TypedQuery<Department> typedQuery = em.createquery(query,Department.class); // This can throw an exception
       List<Department> deps = typedQuery.getResultList(); // This can also throw an exception
       //... do some stuff with the departements
  }

到目前为止,我发现的替代方法是从原始的创建另一个EntityManager(em.getEntityManagerFactory().createEntityManager()),首先运行我的查询,然后在原始的中重新执行它们(如果成功),但这真的不高效,看起来很难看.

我使用EclipseLink作为JPA实现,我无法切换到另一个JPA实现.

解决方法

我想你想要JPQL的complile-time验证.无法检查查询语法是否正确.

为了完成您想要的工作,请使用标准api而不是JPQL.检查文档中的条件api.您需要使用元模型进行编译时检查

原文地址:https://www.jb51.cc/java/129176.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐