Java Hibernate - 从数据库中检索值时,事务处于非活动状态

时间:2012-05-16 13:42:12

标签: java hibernate exception

我需要从数据库中获取一些数据。为此我写了像

这样的代码
try{
   return (EmployeeImpl) em.createQuery(
      "select e from EmployeeImpl e " +
      "where e.empName = :employeeName " + 
          " and (e.eDate is null or e.eDate <=   :todaysDate )")
 .setParameter("employeeName", employeeName)
 .setParameter("todaysDate", todaysDate)
 .getSingleResult();
}catch(NoResultException exception){
     throw new NoResultException("Record not found");
}

我应该返回一个有效记录。但是给出了像

这样的例外

org.hibernate.util.JDBCExceptionReporter]事务处于非活动状态:tx = TransactionImple&lt; ac,BasicAction:0:ffff0a5308fa:126a:4fb36c77:559 status:ActionStatus.ABORT_ONLY&gt ;; - 嵌套throwable:(javax.resource.ResourceException:事务处于非活动状态:tx = TransactionImple&lt; ac,BasicAction:0:ffff0a5308fa:126a:4fb36c77:559 status:ActionStatus.ABORT_ONLY&gt;)

 org.hibernate.exception.GenericJDBCException: Cannot open connection

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection

我的应用程序可以连接到数据库,因为我可以在其他地方执行CRUD操作。

这种例外可能是什么原因。

3 个答案:

答案 0 :(得分:0)

原因似乎很清楚:

  

org.hibernate.exception.GenericJDBCException:无法打开连接

无论出于何种原因,您发布的代码无法获取连接,而应用程序的其他部分(根据您发布的内容)可以做得很好。我会检查以确保代码的这一部分配置不同,使用不同的方法来获取连接等。

答案 1 :(得分:0)

在实际执行任何数据库操作(如插入,更新或选择)之前,您应首先启动事务(当然在获取会话对象之后)。然后你应该做任何CRUD操作。在执行查询之前,请确保您正在开始交易。

答案 2 :(得分:0)

根本原因:数据不可用

getSingleResult()抛出空指针异常,而getResultList()返回null,根据您在查询中传递的条件找到零记录的情况。 尝试更换: -

catch(NoResultException exception){
     throw new NoResultException("Record not found");
}

catch(NoResultException exception){
    throw new NoResultException("Record not found");
}
catch(Exception ex){
    ex.printStackTrace();
}

我确定你会在日志中得到NullPointerException。简而言之,这个完整的痕迹应该得到: -

SQL Error: 0, SQLState: null
Transaction is not active: tx=TransactionImple < ac, BasicAction: 0:ffffa9b67064:126a:58924abe:14bb957 status: ActionStatus.ABORT_ONLY >; - nested throwable: (javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: 0:ffffa9b67064:126a:58924abe:14bb957 status: ActionStatus.ABORT_ONLY >)
org.hibernate.exception.GenericJDBCException: Cannot open connection

其中明确说明了您的交易被中止的方式和原因。