Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 静态变量中的关闭会话问题与Hibernate中的非静态会话问题_Java_Static_Hibernate Session - Fatal编程技术网

Java 静态变量中的关闭会话问题与Hibernate中的非静态会话问题

Java 静态变量中的关闭会话问题与Hibernate中的非静态会话问题,java,static,hibernate-session,Java,Static,Hibernate Session,我正在写一个软件测试,我有一个我无法理解的异常。在我的应用程序中有一个用户类,用户数据将从数据库提供给单元测试。用户供应商已为此目的编写: public class UserSupplier { private static IUserRepository repository; static { try { IUnitOfWork unitOfWork = DependencyResolver.getVariable().resolve(IUn

我正在写一个软件测试,我有一个我无法理解的异常。在我的应用程序中有一个用户类,用户数据将从数据库提供给单元测试。用户供应商已为此目的编写:

public class UserSupplier {

private static IUserRepository repository;

static 
{

    try {
        
        IUnitOfWork unitOfWork = DependencyResolver.getVariable().resolve(IUnitOfWork.class);
        
        if(unitOfWork == null)
            throw new NullPointerException(IUnitOfWork.class);
        
        Session session = unitOfWork.getSession();
        
        if(session == null)
            throw new NullPointerException(Session.class);
        
        // Line 20
        System.out.println(" is session connected : "+ session.isConnected() + " " + Instant.now());
        
        if(!session.isOpen())
            throw new RuntimeException("closed session");
        
        repository = new UserRepository(unitOfWork);
        
    } catch (Exception hata) { 
        
        throw new ExceptionInInitializerError(hata);
        
    }
    
}

// .. other codes
}

该类的主要目的是向用户提供其他测试方法。IUnitOfWork是基本数据库操作的接口,具体的IUnitOfWork类使用Hibernate的Session和SessionFactory类。junit中还有21个其他测试类,每当我将它们作为一个整体运行时,使用UserSupplier的测试类都会失败。失败的原因是“已关闭会话”异常。尽管我写了第20行,但输出指出会话是开放的,然而,关于封闭会话的具体类IUserRepository抱怨。每当我专门运行使用UserSupplier的测试时,它不会导致异常

当我更改UserSupplier时:

我没有将“repository”变量设置为静态变量,代码运行时不会出错。即使我这样解决了这个问题,我也无法理解第一段中异常的机制。你能解释一下为什么我在第一节课上得了异常吗

提前谢谢

public class UserSupplier {

private IUserRepository repository;

public UserSupplier()
{
    this.assignRepository();
}

private void assignRepository()
{

    try {
        
        IUnitOfWork unitOfWork = DependencyResolver.getVariable().resolve(IUnitOfWork.class);
        
        if(unitOfWork == null)
            throw new NullPointerException(IUnitOfWork.class);
        
        Session session = unitOfWork.getSession();
        
        if(session == null)
            throw new NullPointerException(Session.class);
        
        // Line 20
        System.out.println(" is session connected : "+ session.isConnected() + " " + Instant.now());
        
        if(!session.isOpen())
            throw new RuntimeException("closed session");
        
        repository = new UserRepository(unitOfWork);
        
    } catch (Exception hata) { 
        
        throw new ExceptionInInitializerError(hata);
        
    }
    
}

}