我需要从数据库中获取一些数据。为此我写了像
这样的代码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操作。
这种例外可能是什么原因。
答案 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
其中明确说明了您的交易被中止的方式和原因。