将JPQL查询转换为纯SQL

时间:2016-02-02 19:45:21

标签: sql logging jpql weblogic-10.x ejb-2.x

我在我的ejb java应用程序中遇到问题..并试图解决它我偶然发现了这个问题。 在我的ejb课程中,我有一个finder方法

  /*   @ejb.finder signature="java.util.Collection findByAllMultiPlan(<list          
  of arguments>)" 
 *    
 * query="SELECT OBJECT(e)
 *                     FROM ElementTbl as e
 *     WHERE <LOTS OF STUFF>"

该方法有时失败,而不是一直失败。 (大多数时候在大数据输入上循环运行)它可能在第8次,第10次或第35次迭代时失败等。 它失败了&#34; Finder&#34;例外

  

javax.ejb.EJBException:嵌套异常是:javax.ejb.FinderException:       准备或执行查询时findByCriteria中的异常:        声明:&#39; weblogic.jdbc.wrapper.PreparedStatement_com_inet_tds_r@bd44a1'         java.sql.SQLException:事务不再处于活动状态 - 状态:
      &#39;回滚。 [原因= weblogic.transaction.internal.TimedOutException:       交易在33秒后超时

     

BEA1-655E9CABEFC3D5D9F078]&#39 ;.此内不允许进一步的JDBC访问       transaction.java.sql.SQLException:事务不再处于活动状态 -
      状态:&#39;回滚。        [Reason = weblogic.transaction.internal.TimedOutException:事务定时        在33秒后出局BEA1-655E9CABEFC3D5D9F078]&#39;。没有进一步的JDBC访问        在此交易中允许。

在日志文件中,我看到以weblogic jpql格式执行的查询

SELECT WL0.mreUidID, WL0.mreDtmCreated, WL0.mreCdeCustType, WL0.mreIn...
 .. many,many fields ...
FROM tblElement WL0 WHERE ( ( ( ( ( ( ( ( ( WL0.elVchID= ? ) AND (  
((((((((WL0.elVchAnotherId = ? ) .. and a lot of fields encoded with 
 "WL0.field =?"

没有设置的值输出代替? 所以,问题是:是否可以将该JPQL语言转换为纯SQL,以便在查询分析器中运行? 同样,每次我需要测试特定场景时,查询都非常大,我需要接近一个多小时才能填写所有内容。 必须有一个java方法或实用程序才能从我的EJB类中访问它 请帮忙!!!

0 个答案:

没有答案