我创建了一个带有项目读取器、项目处理器和项目写入器的spring批处理服务。我扩展了AbstractPagingItemReader,并创建了自己的实现,名为JPapAgingItemReader。现在,当我运行批处理服务时,读取器从db(默认页面大小:10)读取一组固定的记录,处理它们并写入它们。然而,在第二次读取时,它抛出以下异常:
2015-06-25 16:33:00,712 ERROR [jobLauncherTaskExecutor-6][saeedh:120659] org.hibernate.util.JDBCExceptionReporter : DB2 SQL Error: SQLCODE=-270, SQLSTATE=42997, SQLERRMC=63, DRIVER=3.61.65
2015-06-25 16:33:00,712 ERROR [jobLauncherTaskExecutor-6][saeedh:120659] org.hibernate.util.JDBCExceptionReporter : DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-270;42997;63, DRIVER=3.61.65
2015-06-25 16:33:00,712 ERROR [jobLauncherTaskExecutor-6][saeedh:120659] org.hibernate.util.JDBCExceptionReporter : DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-270;42997;63, DRIVER=3.61.65
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-270, SQLSTATE=42997, SQLERRMC=63, DRIVER=3.61.65
at com.ibm.db2.jcc.am.ed.a(ed.java:676)
at com.ibm.db2.jcc.am.ed.a(ed.java:60)
at com.ibm.db2.jcc.am.ed.a(ed.java:127)
at com.ibm.db2.jcc.am.gn.c(gn.java:2554)
at com.ibm.db2.jcc.am.gn.d(gn.java:2542)
at com.ibm.db2.jcc.am.gn.a(gn.java:2034)
at com.ibm.db2.jcc.am.hn.a(hn.java:6500)
at com.ibm.db2.jcc.t4.cb.g(cb.java:140)
at com.ibm.db2.jcc.t4.cb.a(cb.java:40)
at com.ibm.db2.jcc.t4.q.a(q.java:32)
at com.ibm.db2.jcc.t4.rb.i(rb.java:135)
我知道这个错误可能是因为表中有一个CLOB列,我正在从那里读取记录,但奇怪的是,它很好地读取了第一批10条记录,处理它们并写入它们,但在第二次读取时,它抛出了上面的例外。有什么建议吗?下面是我创建的JpaPagingItemReader的一个片段。从AbstractPagingItemReader.java重写doReadPage方法。
protected void doReadPage ()
{
setPageSize (10);
// Flush we already have in entity manager
getEntityManager ().flush ();
// clear the entity manager: To read and detach
getEntityManager ().clear ();
Query query = createQuery ().setFirstResult (getPage () * getPageSize ()).setMaxResults (getPageSize ());
if (parameterValues != null)
{
for (Map.Entry<String, Object> me : parameterValues.entrySet ())
{
query.setParameter (me.getKey (), me.getValue ());
}
}
if (results == null)
{
results = new CopyOnWriteArrayList<T> ();
}
else
{
results.clear ();
}
results.addAll (query.getResultList ());
// Detach all objects that became part of persistence context
getEntityManager ().clear ();
}
任何帮助都是非常感谢的,因为我已经落后于最后期限由于这个问题。请如果你认为任何东西是缺失的,请让我知道,我会更新的问题。谢谢。
我想通了,问题确实是我们不允许将Clob数据作为可滚动JPA游标中的投影,前10条记录可以读取,但当它开始读取第二批时,它必须将游标从0移动到第11条记录,这就是我遇到sql异常的时候。
简单的修复方法是从select语句中删除CLOB列,并在需要它的值的单独查询中获得它。这解决了我的问题。谢谢。
我的代码: 请帮助,因为这是在生产。。。
我的页面正在成功加载智能表js,但是当我尝试使用分页功能(如留档所示)时,我收到以下错误 和 我不确定我做错了什么,但下面是我的代码。任何帮助都会很好!谢谢
我的项目使用Spring Boot和Hibernate,我的数据库是MySql。我使用的是注释而不是JPA。调用Rest api时,得到如下响应: 白标错误页 这是我的申请表。属性
所以我使用了DataInputStream、FileInputStream、BufferInputStream、FileReader、BufferedReader、Scanner。它们都抛出FileNOtFoundException或CorruptedStreamException。
此代码的输出是 这意味着异常将由<代码>接收器重新引发。下一步(i) 在推送方法和非推送错误反应通道中。为什么?
我有一个spring boot项目,我使用spring JPA。我有一个模型,它有一个列,它的数据库列名是。我调用<code>findAll(谓词谓词,Pageable-Pageable) 当我在ReceiptService中使用创建谓词并使用传递它时,它完全正常工作,但当我添加排序时,它会抛出以下异常: