为什么当我尝试用hibernate4运行项目时,它会给我一个错误:不支持嵌套事务



我在一个项目中将hibernate从版本3升级到了版本4我正试图从数据库中选择一些东西:

Configuration config;
        SessionFactory sf;
        ServiceRegistry sr;
        private static Manager m;
        private Manager() {
            config = new Configuration();
            config.addAnnotatedClass(User.class);
            config.addAnnotatedClass(Produs.class);
            config.configure("hibernate.cfg.xml");
            sr = new ServiceRegistryBuilder().applySettings(config.getProperties())
                    .buildServiceRegistry();
             new SchemaExport(config).create(true, true);
            sf = config.buildSessionFactory(sr);
        }
    public void getProducts(){

    Session s = sf.getCurrentSession();
    s.beginTransaction();
            Query q=s.createQuery("from Produs as p WHERE p.numeProdus LIKE :numeP AND p.descriere LIKE :descriereP AND p.categorie LIKE :categorieP");
             q.setParameter("numeP", "%"+produs.getNumeProdus()+"%");
             q.setParameter("descriereP", "%"+produs.getDescriere()+"%");
             q.setParameter("categorieP", "%"+produs.getCategorie()+"%");           
             List l=q.list();
             return l;
    }

我在hibernate 3中的函数"getProducts"中做了同样的事情,这就成功了。在版本4中不再工作。

在3和4之间发生了一些变化。这就是我从3级升级到4级后必须做的事情。

    if (session.getTransaction() != null
            && session.getTransaction().isActive()) {
        txD = session.getTransaction();
    } else {
        txD = session.beginTransaction();
    }
    //txD = session.beginTransaction();
    // txD.begin() ;
    session.saveOrUpdate(dataStore);
    try {
        txD.commit();
        while (!txD.wasCommitted())
            ;
    }

最新更新