To release the connection, you may call:
emf.close();

解决方案 »

  1.   

    我也在finnally中加了
      finally{
        em.close();
        emf.close;
     }但是此时(用emf的时候),下面的Sql文就执行不了了, 
      StringqueryString = "DELETE FROM IWUser user " +
         "WHERE user.userType = :userType " ;错误提示就是: No mapping for IWUser.  如果我写成 em.find(UserBean.class, id) 的话, 就是不认这个EntityBean, 所以呢就没法和数据库链接,下面的close 也就不能说明什么了!
      

  2.   

    JPA并不能准确的控制连接,我们需要保证EntityManager被正确的释放就行了。
    可以把EntityManagerFactory放到一个Singleton里。然后对每个请求创建EntityManager并释放就行了。
    fake code:
    static EntityManagerFactory factory=Persistence.createEntityManagerFactory();public void request(){
         EntityManager em=factory.createEntityManager();
         
         try{
         //use em to do your business
         }finally{
            em.close();
         }
    }remember to release the factory when your app exit.
      

  3.   

    To cool_guy(裤盖) :
      我想你还是没明白我的问题。如果 用EntityManagerFactory去创建 EntityManager的场合下,此时首要问题并不是能否释放链接了?
        首要问题是下面的SQL 文就首先执行不了了:
      StringqueryString = "DELETE FROM IWUser user " +
         "WHERE user.userType = :userType " ;     ---〉 No mapping for IWUser  em.find(UserBean.class, id)    ———〉 UserBean cannot be found 也就是说,此时根本就没和数据库建立起链接呢, 下面的close()也就没什么意义了!所以:  在使用EntityManagerFactory去创建 EntityManager的场合, 我的首要问题是:   
            1.如何使上述SQL语句能够执行? 
      只有这个问题解决了, 我才能够接着下一步的验证,验证close是否生效?
      啰嗦这么多, 希望你能理解我的意思!