Логика для добавления сотрудников
Есть класс для добавления данных в таблицу с помощью vaadin:
@SpringComponent
@UIScope
public class EmployeeEditor extends VerticalLayout implements KeyNotifier {
private final EmployeeRepositiry employeeRepositiry;
private Employee employee;
private TextField lastname = new TextField("","Фамилия");
private TextField firstname = new TextField("","Имя");
private TextField patronymic = new TextField("","Отчество");
private TextField departament = new TextField("","Отдел");
private Button save = new Button("Сохранить", VaadinIcon.CHECK.create());
private Button cancel = new Button("Отменить");
private Button delete = new Button("Удалить", VaadinIcon.TRASH.create());
private HorizontalLayout actions = new HorizontalLayout(save, cancel,
delete);
private Binder<Employee> employeeBinder = new Binder<>(Employee.class);
private ChangeHandler changeHandler;
public interface ChangeHandler{
void onChange();
}
@Autowired
public EmployeeEditor(EmployeeRepositiry employeeRepositiry) {
this.employeeRepositiry = employeeRepositiry;
add(lastname, firstname, patronymic, departament, actions);
employeeBinder.bindInstanceFields(this);
setSpacing(true);//добавляет интервалы между филдами
save.getElement().getThemeList().add("primary");//getElement().getThemeList()
delete.getElement().getThemeList().add("error");//добавляет оформление:
"error"-кнопка
addKeyPressListener(Key.ENTER, e -> save());
save.addClickListener(e -> save());//устанавливает обработчики кнопок
delete.addClickListener(e -> delete());
cancel.addClickListener(e -> editEmployee(employee));
setVisible(false);//делает форму невидимой
}
private void save() {
employeeRepositiry.save(employee);
changeHandler.onChange();
}
private void delete() {
employeeRepositiry.delete(employee);
changeHandler.onChange();
}
public void editEmployee(Employee emp) {
if (emp == null) {
setVisible(false);
return;
}if (emp.getId() != null) {
this.employee = employeeRepositiry.findById(emp.getId()).orElse(emp);
}else {
employee = emp;
}
employeeBinder.setBean(this.employee);//ляжет в филды
setVisible(true);
lastname.focus();//видимости
}
public void setChangeHandler(ChangeHandler changeHandler) {
this.changeHandler = changeHandler;
}
}
Сущности:
@Entity
@Table
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String lastname;
private String firstname;
private String patronymic;
private String departament;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_DEPARTAMENT")
private Departaments depid;
@Entity
@Table
public class Departaments {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long Id;
private String phone;
private String chief;
private String email;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Employee> employees = new HashSet<>();
В таблице Department есть два отдела, как сформировать класс EmployeeEditor
чтобы в таблицу Employee формировалась колонка dep_id(1 или 2), в зависимости
от отдела куда мы добавляем сотрудника?