Hibernate,麻烦合并

时间:2015-09-27 12:00:20

标签: java hibernate servlets

我正在尝试从我的servlet更新数据库中的对象。但是它成功运行没有任何错误,但不会删除。

我的HibernateUtil看起来像:

public class HibernateUtil {

    private static SessionFactory sessionFactory;
    private static final String HIBER = "hibernate.cfg.xml";

    public HibernateUtil() {
        try {
            sessionFactory = new Configuration().addResource(HIBER).configure()
                    .buildSessionFactory();
        } catch (HibernateException ex) {
            System.out.println(ex);
        }
    }

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public void closeSessionFactory() {
        sessionFactory.close();
    }
}

我在servlet init时实例化上面的类。

@Override
    public void init() {

        hiber = new HibernateUtil();
        System.out.println("Servlet Initialized");
    }

之前我使用过openSession,并且读到最好将getCurrentSession用于Web应用程序,现在我正试图完成它。

String add = request.getParameter("houseId");
            hiber.getSessionFactory().getCurrentSession();
            Transaction tx = session1.beginTransaction();

            House house = (House) session1.get(House.class, Long.parseLong(add));

            System.out.println(house.getAddress());

            SessionUser.getHouses().add(house);

            session1.merge(SessionUser);        
            tx.commit();
            session1.close();

            System.out.println(house.getAddress());

我用smth编辑我的故障代码更简单。我不知道为什么这不起作用。

1 个答案:

答案 0 :(得分:1)

请提交交易并关闭会话。

  String add = request.getParameter("Id");
        Session session1 = hiber.getSessionFactory().getCurrentSession();   
        Transaction tx; 
        try {
            tx = session1.beginTransaction();
            for (Iterator<House> iterator = SessionUser.gethouse().iterator(); iterator.hasNext();) {
                House house = iterator.next();
                if (house.getProjectId() == Long.parseLong(add)) {
                    iterator.remove();
                    session1.remove(house);
                    session1.flush();
                }
            }

            session1.merge(SessionUser);
            tx.commit();    

        } catch (Exception e) {
            System.out.println(e);
        } finally {         
            System.out.println("______");
            session1.close();
        }