CommitEdit 函数在创建 table 时执行

CommitEdit function gets executed on creation of the table

我的 table 视图有一个自定义 editable table 单元格。现在,我遇到的问题是 commitEdit() 函数在创建 table 时执行。问题是它会减慢程序速度,因为我正在更新数据库中的项目并且每个项目都会更新。

public class ChoiceBoxCell extends TableCell<Student, Classroom> {

    ChoiceBox<Classroom> classroomChoiceBox;

    public ChoiceBoxCell(ObservableList<Classroom> classroomObservableList) {
        classroomChoiceBox = new ChoiceBox<>();
        classroomChoiceBox.setItems(classroomObservableList);

        classroomChoiceBox.getSelectionModel().selectedItemProperty().addListener((obs, oldValue, newValue) -> {
            if (newValue != null) {
                processEdit(newValue);
            }
        });
    }
    private void processEdit(Classroom value) {
        commitEdit(value);
        classroomChoiceBox.setValue(value);
        setGraphic(classroomChoiceBox);
    }

    @Override
    public void cancelEdit() {
        super.cancelEdit();
        setGraphic(classroomChoiceBox);
    }

    @Override
    public void commitEdit(Classroom value) { // gets executed on start up
        super.commitEdit(value);
        Student student = (Student) getTableRow().getItem();
        student.setClassroom(value);
        new StudentDao().updateStudent(student); // students get updated for no reason
        classroomChoiceBox.setValue(value);
        setGraphic(classroomChoiceBox);
    }

    @Override
    public void startEdit() {
        super.startEdit();
        Classroom value = getItem();
        if (value != null) {
            classroomChoiceBox.setValue(value);
            setGraphic(classroomChoiceBox);
        }
    }

    @Override
    protected void updateItem(Classroom item, boolean empty) {
        super.updateItem(item, empty);
        if (item == null || empty) {
            setGraphic(null);
        } else {
            classroomChoiceBox.setValue(item);
            setGraphic(classroomChoiceBox);
        }
    }
}

编辑:解决方案-感谢@James_D

classroomChoiceBox.getSelectionModel().selectedItemProperty().addListener((obs, oldValue, newValue) -> {
        if (newValue != null && newValue != getItem()) {
            processEdit(newValue);
        }
    });

解决方案-感谢James_D

classroomChoiceBox.getSelectionModel().selectedItemProperty().addListener((obs, oldValue, newValue) -> {
        if (newValue != null && newValue != getItem()) {
            processEdit(newValue);
        }
    });