命名查询的mysql错误



我有一个简单的命名查询。我们进行了冬眠库的升级,我们看到了以下错误。它在以前的版本中正常工作。

有什么原因简单查询失败了?

    Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
        at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) [hibernate3.jar:]
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) [hibernate3.jar:]
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) [hibernate3.jar:]
        at org.hibernate.loader.Loader.doList(Loader.java:2545) [hibernate3.jar:]
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) [hibernate3.jar:]
        at org.hibernate.loader.Loader.list(Loader.java:2271) [hibernate3.jar:]
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:459) [hibernate3.jar:]
        at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:365) [hibernate3.jar:]
        at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) [hibernate3.jar:]
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268) [hibernate3.jar:]
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) [hibernate3.jar:]
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:246) [hibernate3.jar:]
        ... 157 more
Caused by: java.sql.SQLException: java.lang.IllegalArgumentException: Negative delay

Hibernate版本为3,代码如下

String selectSql = "select m from UserEntity m";
try {
    Query query = entityManager.createQuery(selectSql);
    Collection<UserEntity> userentities = (Collection<UserEntity>) query.getResultList();

} ...

我正在遇到相同的"负延迟"例外。根据我到目前为止的调查,这似乎是由于JCA层通过Integer.max_value作为MySQL驱动程序的查询超时。MySQL驱动程序后来将其缩写为1000,以将其转换为毫秒,该驱动程序将其溢出为负值,并在用作Java.util.util.timer.timer Schedule()调用的参数时触发"负延迟"异常。我不确定为什么jboss在此问题的特定情况下使用integer.max_value,因为我已经在数据源XML配置中指定了一个明确的超时。要注意的一件事是,只有从从属节点加入JBOSS群集后才能观察到此问题。在此之前,当仅主节点运行时,调用查询的相同工作流程成功完成。

确切的问题似乎是在使用远程EJB客户端上下文查找的EJB调用时传播交易的方式。如果呼叫者在事务中,则远程调用最终会获得无效的值,在这种情况下,integer.max_value,用于JTA层中的事务超时。因此,当JCA层试图基于JTA事务超时配置事务超时时,最终将此巨大的值传递给JDBC。我认为这是JBOSS 6.3 EAP中最近的一个错误,因为我在以前的版本中没有看到它。

最新更新