我正在尝试从我的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编辑我的故障代码更简单。我不知道为什么这不起作用。
答案 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();
}