我有一个从数据库中读取数据的服务。读完后会有一个刷新,导致标题中提到的异常。以下是陈述序列
ManagerFactory factory = new ManagerFactory();
EntityManager manager = factory.getManager();
EntityTransaction transaction = manager.getTransaction();
Query query = manager.createQuery("select personRoleJPA from personRoleJPA");
personRoleJPA = (PersonRoleJPA) query.getSingleResult();
if (manager.isOpen()) {
manager.flush();
}
if (manager.isOpen()) {
manager.close();
manager = null;
}
if (transaction.isActive()) {
transaction.commit();
}
我怀疑异常是因为我没有开始交易。 我的问题是你真的需要冲洗吗?当你没有做任何写作时提交?
答案 0 :(得分:1)
删除与事务相关的所有内容,因为您不需要活动事务来检索数据:
ManagerFactory factory = new ManagerFactory();
EntityManager manager = factory.getManager();
Query query = manager.createQuery("select personRoleJPA from personRoleJPA");
personRoleJPA = (PersonRoleJPA) query.getSingleResult();
if (manager.isOpen()) {
manager.flush();
}
if (manager.isOpen()) {
manager.close();
manager = null;
}
答案 1 :(得分:0)
关于flush()
方法,您可以阅读文档:http://docs.oracle.com/javase/1.5.0/docs/api/java/io/OutputStream.html#flush%28%29
如果您从数据库中读取任何内容,则不需要transaction.commit()
。commit()
用于在执行sql语句后保存更改,但在select语句中,您不需要commit
。JDBC
中的默认值commit是自动提交模式。在hibernate配置文件中,您可以更改此设置。最佳做法是禁用自动提交模式。
关于commit()
,您还可以阅读:https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html