1

我将项目中的休眠从版本 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 中不再起作用。

4

1 回答 1

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())
            ;
    }
于 2013-01-07T06:37:13.593 回答