Удаление строки в таблице mysql Hibernate

187
17 мая 2018, 05:00

Не получается удалить строку из таблицы delete(id) - id подчеркивает красным (… cannot be applied to (javafx.scene.control.TableColumn)

public class MainWindowController implements Initializable {
    @FXML
    private Button ok;
    @FXML
    private TabPane tabPane_selectMenu;
    // выбор главного меню
    @FXML
    private Button button_goodsAll;
    @FXML
    private Button button_invoicesAll;
    @FXML
    private Button button_0All;
    @FXML
    private Button button_reportsAll;
    // товары кнопки
    @FXML
    private Button button_open;
    @FXML
    private Button button_add;
    @FXML
    private Button button_del;
    @FXML
    private Button button_change;
    @FXML
    private Button button_print;
    @FXML
    private TableView<ProductEntity> tableView_tableAll ;
    @FXML
    private TableColumn<ProductEntity,Integer> id ;
    @FXML
    private TableColumn<ProductEntity, String> marking ;
    @FXML
    private TableColumn<ProductEntity,String> name ;
    @FXML
    private TableColumn<ProductEntity,String> unit ;
    @FXML
    private TableColumn<ProductEntity,Double> quantity ;
    @FXML
    private TableColumn<ProductEntity,String> type ;
    @FXML
    private TableColumn<ProductEntity,String> status ;
    @FXML
    private TableColumn<ProductEntity,String> place ;
    @FXML
    private TableColumn<ProductEntity,String> declaration ;
    @FXML
    private TableColumn<ProductEntity,Date> idata ;
    ObservableList<ProductEntity> oblist= FXCollections.observableArrayList();
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        tabPane_selectMenu.setVisible(false);
        button_add.setVisible(false);
        button_open.setVisible(false);
        button_del.setVisible(false);
        button_change.setVisible(false);
        button_print.setVisible(false);
// устанавливаем тип и значение которое должно хранится в колонке
        id.setCellValueFactory(new PropertyValueFactory<ProductEntity,Integer>("id"));
        marking.setCellValueFactory(new PropertyValueFactory<ProductEntity,String>("marking"));
        name.setCellValueFactory(new PropertyValueFactory<ProductEntity,String>("name"));
        unit.setCellValueFactory(new PropertyValueFactory<ProductEntity,String>("unit"));
        quantity.setCellValueFactory(new PropertyValueFactory<ProductEntity,Double>("quantity"));
        type.setCellValueFactory(new PropertyValueFactory<ProductEntity,String>("type"));
        status.setCellValueFactory(new PropertyValueFactory<ProductEntity,String>("status"));
        place.setCellValueFactory(new PropertyValueFactory<ProductEntity,String>("place"));
        declaration.setCellValueFactory(new PropertyValueFactory<ProductEntity,String>("declaration"));
        idata.setCellValueFactory(new PropertyValueFactory<ProductEntity,Date>("idata"));
// заполняем таблицу данными
       tableView_tableAll.setItems(oblist);
        getProductEntity();
    }
    public ObservableList<ProductEntity> getProductEntity() {
        Session session = utils.HibernateSessionFactory.getSessionFactory().openSession();
        List<ProductEntity> eList = session.createCriteria(ProductEntity.class).list();
        for (ProductEntity ent : eList) {
            oblist.add(ent);
        }
        return oblist;
    }
    // метод выбора склад меню. нажатие кнопок накладные, товары, отчеты
    public void selectMenu(final ActionEvent event) {
        //если нажата кнопка товары
        if (event.getSource() == button_goodsAll){
            tabPane_selectMenu.setVisible(true); // открываем таблицу товары
            button_add.setVisible(true);
            button_open.setVisible(true);
            button_del.setVisible(true);
            button_change.setVisible(true);
            button_print.setVisible(true);
            //кнопка добавить
            button_add.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent mouseEvent) {
                    Stage stage = new Stage();
                    Parent root = null;
                    try {
                        root = FXMLLoader.load(getClass().getClassLoader().getResource("add_product.fxml"));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    stage.setTitle("Добавить товар");
                    stage.setResizable(false); //нельзя менять размеры окна
                    stage.setScene(new Scene(root));
                    stage.initModality(Modality.APPLICATION_MODAL);
                    stage.show();
                }
            });
            //кнопка удалить
            button_del.addEventHandler(MouseEvent.MOUSE_CLICKED, mouseEvent -> {
                int selectedIndex = tableView_tableAll.getSelectionModel().getSelectedIndex();
                if (selectedIndex >= 0) {
                    // tableView_tableAll.getItems().remove(selectedIndex);
                    delete(id);
                } else {
                    // Ничего не выбрано.
                    Alert alert = new Alert(Alert.AlertType.WARNING);
                    alert.setTitle("Ошибка");
                    alert.setHeaderText("Не выбрана строка для удаления");
                    alert.setContentText("Выберите строку в таблице");
                    alert.showAndWait();
                }
            });
        }
    }
    private void delete(Integer id ) {
        Session session = utils.HibernateSessionFactory.getSessionFactory().openSession();
        session.beginTransaction();
        ProductEntity productEntity =(ProductEntity) session.get(ProductEntity.class,id);
        session.delete(productEntity);
        session.getTransaction().commit();
        session.close();
    }
}
Answer 1

Метод:

private void delete(Integer id )...

принимает аргумент типа Integer. Вы вызываете метод, указывая в качестве аргумента столбец таблицы:

private TableColumn<ProductEntity,Integer> id ;
...
delete(id);

Скорее всего вам поможет:

ProductEntity selectedItem = tableView_tableAll.getSelectionModel().getSelectedItem();
delete(selectedItem.getId());

или убрать удаление по идентификатору и сразу удалять через сущность (скорее всего данный вариант так же будет рабочим):

private void delete(ProductEntity entity)
...
ProductEntity selectedItem = tableView_tableAll.getSelectionModel().getSelectedItem();
delete(selectedItem);
READ ALSO
Ошибка 0xc000007b при установке MySQL

Ошибка 0xc000007b при установке MySQL

В связи с чем она вылетает в данном случае и как можно её устранить?

186
Не работает move_uploaded_file

Не работает move_uploaded_file

Содержимое indexphp

238
Laravel, не проходит аутентификация

Laravel, не проходит аутентификация

Всем приветСделал аутентификацию как на этом видео https://www

225
Сайт не отправил данных

Сайт не отправил данных

Есть страница с формой, при нажатии на submit пересылает на странице handlerphp, но вместо того что бы что-то сделать пишет:

243