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 Hibernate:应用程序没有';撞车后不能关门_Java_Hibernate_Jpa - Fatal编程技术网

Java Hibernate:应用程序没有';撞车后不能关门

Java Hibernate:应用程序没有';撞车后不能关门,java,hibernate,jpa,Java,Hibernate,Jpa,我的应用程序只是创建了一个EntityManager,然后我故意抛出一个RuntimeException。如果在创建实体管理器之前放置RuntimeException行,则main会正确捕获异常,并且应用程序会关闭(如预期的那样)。但是,如果在此之后发生任何异常,则会捕获异常(我可以看到stacktrace),但应用程序仍在运行,我必须终止它。在Netbeans中,线程的状态是“僵尸” 使用的LIB Hibernate 4.3.1最终版本:来自jpa文件夹和必需的文件夹() 数据库连接器:jt

我的应用程序只是创建了一个EntityManager,然后我故意抛出一个RuntimeException。如果在创建实体管理器之前放置RuntimeException行,则main会正确捕获异常,并且应用程序会关闭(如预期的那样)。但是,如果在此之后发生任何异常,则会捕获异常(我可以看到stacktrace),但应用程序仍在运行,我必须终止它。在Netbeans中,线程的状态是“僵尸”

使用的LIB

  • Hibernate 4.3.1最终版本:来自jpa文件夹和必需的文件夹()
  • 数据库连接器:jtds 1.3.1()
我的测试班

封装测试;
导入javax.persistence.EntityManager;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.persistence;
公共班机{
公共静态void main(字符串[]args){
//在此处引发异常,应用程序按预期关闭
EntityManagerFactory=Persistence.createEntityManagerFactory(“pu”);
EntityManager em=factory.createEntityManager();
//在这里抛出一个异常,它将永远运行
抛出新的RuntimeException();
}
}
persistence.xml


org.hibernate.ejb.HibernatePersistence

您是否有意关闭应用程序?我不确定我是否明白你在这里的意图

如果您只想停止应用程序,可以调用

System.exit(0)
表示程序执行成功,或传入其他数字表示失败。

任何EntityManagerFactory都可以获得需要适当清理的关键资源;在您的示例中,它可能是一个管理连接的线程。 您必须确保工厂已关闭:通常情况下,框架负责适当关闭,但如果您自己管理资源,则必须将下一个块包含在finally块中


不可以。关键是如果我在创建实体之前放置RuntimeException行,则main会正确捕获异常,并且应用程序会关闭(如预期的那样)。但如果在此之后发生任何异常,则会捕获异常(我可以看到stacktrace),但应用程序仍在运行。请尝试在IDE中调试程序,以便查看发生的情况,并验证哪个线程引发了异常。另外,在上面发布堆栈跟踪。我正在使用Netbeans。只有一个线程(main),在异常之后,它的状态是“僵尸”哈哈
EntityManagerFactory factory = Persistence.createEntityManagerFactory("pu");
try {
    // rest of your application here
}
finally {
    factory.close();
}