Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 事务仍处于活动状态时无法关闭连接。连接上出现异常。关闭()_Java_Hibernate_Database Connection_Derby - Fatal编程技术网

Java 事务仍处于活动状态时无法关闭连接。连接上出现异常。关闭()

Java 事务仍处于活动状态时无法关闭连接。连接上出现异常。关闭(),java,hibernate,database-connection,derby,Java,Hibernate,Database Connection,Derby,我有一个方法可以创建与嵌入式Derby数据库的连接,并对其执行Select查询 public PersonMID findPersonMID(String personAlias, CodeUID aliasTypeCodeUID, LogicalDomainMID logicalDomainMID) throws SQLException { Connection connection = getConnection(); try { QueryExe

我有一个方法可以创建与嵌入式Derby数据库的连接,并对其执行Select查询

public PersonMID findPersonMID(String personAlias, CodeUID aliasTypeCodeUID, LogicalDomainMID logicalDomainMID) throws SQLException
{
    Connection connection = getConnection();

    try
    {
        QueryExecutor<Long> findPersonIdByPersonAliasExecutor = FindPersonIdByPersonAliasDelegate.getExecutor(authority,connection, personAlias);

        Long result = findPersonIdByPersonAliasExecutor.execute();

        if(result == null)
        {
            return null;
        }
        return PersonMID.create(authority, result);
    }
    finally
    {
        JDBCAssistant.close(connection);
    }
当我运行这段代码时,我得到一个异常
jdbception:java.sql.SQLException:事务仍处于活动状态时无法关闭连接。

但是,当我在关闭
连接之前调用
Connection.commit()
或为
连接设置
自动提交
true
(默认情况下,我的
连接设置为
false
)时,它允许我成功关闭连接并获得所需的结果

但是我真的需要调用
commit()
来执行
Select
操作吗?有什么要做的?如果我不提交,是否有某个锁没有被释放

这说明我不应该这么做。我应该能够在不必提交或回滚的情况下关闭连接


我遗漏了什么?

如果您不是处于
自动提交
模式,那么
SELECT
语句实际上持有读锁,这取决于您的隔离级别,因此提交
SELECT
查询不仅仅是禁止操作

是的,数据库没有更改,但提交仍然会告诉数据库引擎您的事务已完成查看数据,因此它可以允许其他事务修改数据

以下是一些背景资料:

  • 隔离级别和并发性
  • 共享锁:

  • 如果使用connection.setAutoCommit(true)强制自动提交模式,会发生什么情况?@NicolasFilotto在这种情况下,我可以关闭连接而不出现任何错误。因此我怀疑在derby的全局配置中,这不再是默认启用的自动提交模式。获取连接后getAutoCommit()返回什么?或者,如果方法getConnection()未处于自动提交模式,则根据所选的隔离级别,与查询匹配的记录可能处于锁定状态,直到您提交事务以释放锁定为止。如果您确实处于自动提交模式,则无需提交任何内容,这就是为什么我想知道getAutoCommit()的值
    select P.PRSON_ID from PRSON_ALIAS PA join PRSON P on P.PRSON_ID = PA.PRSON_ID and P.LOGICAL_DOMAIN_ID = ? where PA.PRSON_ALIAS_TYPE_CD = ? and    PA.ALIAS = ?