为什么当我尝试使用hibernate4运行项目时,它给出了错误:不支持嵌套事务?

时间:2012-02-24 20:24:50

标签: hql hibernate-4.x

我将项目中的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;
    }

我从函数" getProducts"中做了同样的事情。在hibernate 3中,这有效。在版本4中不再有效。

1 个答案:

答案 0 :(得分:0)

在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())
            ;
    }