java – 如何以编程方式验证JPQL(JPA查询)
发布时间:2020-05-28 15:46:43 所属栏目:Java 来源:互联网
导读:我正在寻找一种以编程方式验证JPA查询的方法. 在(Spring)事务中,我有一个要运行的查询列表.这些查询可能包含我想要捕获的语法错误,以便事务可以继续. 我的第一个想法是使用EntityManager并创建并执行我的查询,如果它们失败,那么我可以简单地捕获异常,记录警告
|
我正在寻找一种以编程方式验证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.您需要使用元模型进行编译时检查 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – Ehcache设置为永恒但无论如何都会忘记元素?
- java – 有没有办法用ibm-jdk for linux进行实时堆转储?
- java – 在类似网络应用程序之间共享Web层代码(控制器和JSP
- java通过Throwable的printStackTrace方法将异常信息保存到字
- java – ZonedDateTime作为Spring REST RequestMapping中的
- 解决Eclipse add external jars运行出现java.lang.NoClassD
- Java连接Access数据库执行增删改查操作
- JAVA版排序算法之快速排序示例
- Android DP和PX之间的转换
- 是否有针对Java的监听器的Map实现?
