Как удалить несколько элементов из наблюдаемого списка с помощью Hibernate - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть несколько элементов в таблице Javafx.Я хочу иметь возможность удалить несколько строк

Я добавил приведенный ниже код, однако мне нужен совет относительно Hibernate

shifttonTable.getSelectionModel (). SetSelectionMode (SelectionMode.MULTIPLE);

@FXML
private void handleDeleteShiftOn() {
    int selectItem = shiftonTable.getSelectionModel().getSelectedIndex();
    if (selectItem >= 0) {

         ObservableList<ShiftOnDate> itemsSelected, AllSelected;
         AllSelected = shiftonTable.getItems();  
            itemsSelected = shiftonTable.getSelectionModel().getSelectedItems();

        Alert alert = new Alert(AlertType.CONFIRMATION);
        alert.setTitle("Confirmation Dialog");
        alert.setHeaderText("Look, a Confirmation Dialog");
        alert.setContentText("Are you sure you want to Delete?");

        Optional<ButtonType> result = alert.showAndWait();
        if (result.get() == ButtonType.OK) {
            rosterService.removeShiftOnDate(itemsSelected);
            loadShiftOn();
        } else


@Override
public void removeShiftOnDate(ObservableList<ShiftOnDate> itemsSelected) {

    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    //ShiftOnDate s = (ShiftOnDate) session.load(ShiftOnDate.class, itemsSelected);
    session.delete(itemsSelected);
    session.getTransaction().commit();

    session.close();
}

Я вижу выбранные элементы, но не уверен, как правильно перейти в режим гибернации для удаления элементов.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Перебрать список и вызвать 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();
}
0 голосов
/ 20 сентября 2019

Вы должны попробовать org.hibernate.ScrollableResults class, чтобы удалить несколько элементов.Ниже приведен пример того, как удалить:

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, а также передать его как переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...