【问题标题】:Why even when I close the EntityManager I can´t manipulate the database?为什么即使我关闭 EntityManager 我也无法操作数据库?
【发布时间】:2015-09-09 14:04:01
【问题描述】:

我创建EntityManager,开始一个事务,提交它,然后我关闭EntityManager。为什么我不能在我的应用程序运行时操作数据库(即使在关闭 EntityManager 连接 em.close(); 之后)?

    public void create(Product product) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            em.persist(product);
            em.getTransaction().commit();
            em.close();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

【问题讨论】:

  • 实际上应该打开EntityManager 来操作数据库....您是否将@Transactional 添加到进行数据库操作的方法中?您使用的是纯 Java 还是休眠?
  • 请不要在 cmets 添加代码,编辑您的问题
  • 澄清一下:您不能在您的应用程序之外操作数据库,即绕过内部连接池?
  • @dhke,确认..就是这样
  • 操纵数据库”到底是什么意思?如果您连接到正确的数据库服务器,即使您的应用程序正在运行,您也应该能够针对该数据库运行 DML 语句。您使用的是哪个 DBMS?以及如何连接?

标签: java hibernate


【解决方案1】:

我在使用单用户数据库时也遇到过类似的问题。我怀疑问题在于实体管理器正在使用从连接池中获取的 JDBC 连接,因此即使实体管理器已关闭,连接仍保持打开状态,已返回池以供将来使用。

This question 提出了一些允许对 H2 进行多次访问的可能性。

或者,下载 MySQL 之类的东西怎么样?

【讨论】:

    【解决方案2】:

    只需将auto_server=true 添加到该行 <property "javax.persistence.jdbc.url"value="jdbc:h2:C:/Users/Bruno/protocol_tracker;auto_server=true"/> 在persistence.xml 文件和“voilà”中。它可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-21
      • 2021-09-20
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多