如何使用Hibernate从可观察列表中删除多个项目

时间:2019-09-19 21:32:00

标签: hibernate

Javafx表中有很多项目。我希望能够进行多行删除

我添加了以下代码,但是我需要关于Hibernate的建议

shiftonTable.getSelectionModel()。setSelectionMode(SelectionMode.MULTIPLE);

recursiveTimeout = setTimeout(function showNotification(){
    // Here is much logic and work with indexeddb
    // registration.showNotification(...)
    recursiveTimeout = setTimeout(showNotification, interval)
}, 0)

我可以看到选中的项目,但是不确定如何正确地休眠以删除这些项目。

2 个答案:

答案 0 :(得分:0)

您应该尝试org.hibernate.ScrollableResults类来删除多个项目。以下是删除方法的示例:

public static void purgeyourRecords() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            Criteria cr = session.createCriteria(EntityClass.class);
            cr.add(Restrictions.eq("fieldName", fieldValue));
            ScrollableResults items = cr.scroll();
            int count = 0;
            while (items.next()) {
                EntityClass entity= (EntityClass) items.get(0);
                session.delete(entity);
                if (++count % 100 == 0) {
                    session.flush();
                    session.clear();
                }
            }
            tx.commit();
        } catch (HibernateException asd) {
            log.debug(asd.getMessage());
            if (tx != null) {
                tx.rollback();
            }
        } finally {
            session.close();
        }

    }

这将删除条件中的所有记录。您可以先将列表创建为cr.list,然后将其作为变量传递。

答案 1 :(得分:0)

遍历列表,并对每个项目调用delete:

@Override
public void removeShiftOnDate(ObservableList<ShiftOnDate> itemsSelected) {    
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    for (ShiftOnDate item: itemsSelected) {
        session.delete(item);
    }
    session.getTransaction().commit();    
    session.close();
}