Как правильно использовать EntityManager при добавлении и удалении элементов из таблицы? - PullRequest
1 голос
/ 04 ноября 2019

Как правильно использовать EntityManager при добавлении и удалении элементов из таблицы?


В настоящее время я работаю с Hibernate And JavaFX.

Мой вопрос: яиметь эту таблицу JavaFX, которая содержит объекты Fruit.class. Я добавляю и удаляю объекты в этой таблице, и когда я нажимаю Сохранить, я хочу обновить базу данных. Как мне спроектировать использование EntityManager? Должен ли я держать EntityManager открытым, пока открыт этот экран? Согласно некоторым сообщениям о SO, я должен открывать и закрывать EntityManager для каждой сделанной транзакции. Однако в этом случае «транзакция» включает в себя добавление и удаление 0 ... n объектов Fruit.class.

Другими словами, пользователь может добавлять и удалять фрукты перед сохранением.

Как мне правильно подойти к этому, относительно EntityManager?

Также можно ли использовать для операции отмены таблицы аудита из спящего режима?

enter image description here


public class FruitsController implements Initializable {

    @FXML
    private TableColumn<Fruit, Long> fruitId;

    @FXML
    private TableColumn<Fruit, String> fruitColor;

    @FXML
    private TableView<Fruit> fruitsTable;

    @FXML
    private Label labelTitle;

    @FXML
    private Button buttonSave;

    @FXML
    private Button undoAction;

    @FXML
    private MenuItem addFruitButton;

    @FXML
    private MenuItem removeFruitButton;

    @FXML
    void addFruit(ActionEvent event) {
        fruitsTable.getItems().add(new Fruit());
    }

    @FXML
    void removeFruit(ActionEvent event) {
        int i = fruitsTable.getSelectionModel().getSelectedIndex();
        if(i > 0){
            fruitsTable.getItems().remove(i);
        }else{
            Toolkit.getDefaultToolkit().beep();
        }
    }

    @FXML
    void saveFruits(ActionEvent event) {

        EntityManager entityManager = InitHibernate.getSessions().createEntityManager();
        //fruitsTable.getItems()


        entityManager.close();
    }

    @FXML
    void undoLastAction(ActionEvent event) {

    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        fruitId.setCellValueFactory(new PropertyValueFactory<Fruit, Long>("id"));
        fruitColor.setCellValueFactory(new PropertyValueFactory<>("color"));

        fruitId.setCellFactory(TextFieldTableCell.forTableColumn(new LongStringConverter()));
        fruitColor.setCellFactory(TextFieldTableCell.forTableColumn());

        fruitColor.setEditable(true);
        fruitsTable.setEditable(true);

        fruitsTable.setItems(loadFruits());

        InitHibernate.initHibernate();

    }

       /**
 * *
 * It returns and load from hibernate
 *
 * @return
 */
private ObservableList<Fruit> loadFruits() {
    EntityManager em = null;
    ObservableList<Fruit> observableArrayList = null;
    try {
        em = InitHibernate.getSessions().createEntityManager();

        FruitDAO fruitDAO = new FruitDAO(em);

        observableArrayList = FXCollections.observableArrayList(fruitDAO.getLista());

    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        if (em != null) {
            em.close();
        }
    }

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