在表中添加和删除项目时如何正确使用EntityManager?

在表中添加和删除项目时如何正确使用EntityManager?


我目前正在使用Hibernate和JavaFX。

我的问题是: 我有这个JavaFX表,其中包含Fruit.class对象。我在此表上添加和删除对象,然后单击“保存”,我想更新数据库。 我应该如何设计使用EntityManager? 打开此屏幕时,我是否应该将EntityManager保持打开状态?根据SO上的一些帖子,我应该为完成的每个事务打开和关闭EntityManager。但是,在这种情况下,“事务”涉及添加和删除0 ... n Fruit.class对象。

换句话说,用户可以在保存之前添加和删除Fruits。

关于EntityManager,我该如何正确处理?

此外,对于“撤消”操作,我可以使用休眠状态的审核表吗?

在表中添加和删除项目时如何正确使用EntityManager?


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;
}
}
cat0927 回答:在表中添加和删除项目时如何正确使用EntityManager?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3164241.html

大家都在问