【问题标题】:Read only service : javax.persistence.TransactionRequiredException: no transaction is in progress只读服务:javax.persistence.TransactionRequiredException:没有正在进行的事务
【发布时间】:2015-05-04 12:46:49
【问题描述】:

我有一个从数据库读取数据的服务。阅读后有一个刷新导致标题中提到的异常。下面是语句顺序

    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();
   }

我怀疑异常是因为我没有开始交易。 我的问题是,当您不进行任何写入时,您真的需要刷新和提交吗?

【问题讨论】:

  • 不,当你不写任何东西时,不需要刷新和提交
  • 删除所有与事务相关的行,您将摆脱问题
  • @ Hussein Zawawi:你的意思是我什至不需要创建事务'EntityTransaction transaction = manager.getTransaction();' ?
  • @Hussein Zawawi:所以只关闭经理就足够了? if (manager.isOpen()) { manager.close();经理=空; }

标签: java hibernate


【解决方案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;
    }

【讨论】:

  • 我不写东西时是否需要开始交易?
  • 是的,你不能在非活动事务上调用提交,当你调用 Transaction.begin() 时,事务会被激活。@Sandra
【解决方案2】:

关于flush()方法可以从文档中阅读:http://docs.oracle.com/javase/1.5.0/docs/api/java/io/OutputStream.html#flush%28%29
如果您从数据库中读取任何内容,则不需要 transaction.commit().commit() 用于在执行 sql 语句后保存更改,但在 select 语句中您不需要 commitJDBC 中的默认提交是自动提交模式。休眠配置文件,您可以更改此设置。最佳做法是禁用自动提交模式。
关于commit()也可以阅读:https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 2010-12-20
    • 2021-09-21
    相关资源
    最近更新 更多