我使用来自IntelliJ的Gradle插件application
和任务run
运行此主类。我可以运行并调试它,但程序不能完成。这意味着,它在IntelliJ中看起来程序仍在运行,但我在调试模式下看到它离开了main()方法。
可能是什么原因?
代码:
public class HibernateTest {
public static EntityManagerFactory entityManagerFactory;
public static void main(String[] args) {
System.out.println("TEST");
EntityManager entityManager;
try {
setUp();
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist( new Person( "Jim" ) );
entityManager.persist( new Person( "Tim") );
entityManager.getTransaction().commit();
entityManager.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
System.out.println("Finished");
}
protected static void setUp() throws Exception {
entityManagerFactory = Persistence.createEntityManagerFactory( "vwg.vw.hrit.HibernateTest" );
}
}
IntelliJ屏幕:
答案 0 :(得分:1)
你应该写:
entityManagerFactory.close();
这将使您的entityManager也被视为已关闭: https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManagerFactory.html#close--
答案 1 :(得分:0)
仍然有一个非守护程序线程正在运行。
使用jstack附加到正在运行的进程以进行线程转储或请求IDE执行此操作。