Если надо, чтобы при добавлении новой строки фильтр тоже обновлялся, то у листа можно изменить метод так:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long
Dim ws As Worksheet
Set ws = Me
If Not Intersect(Target, Me.Range("B1:B2")) Is Nothing Then
ApplyDateFilter Me
End If
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
If Not Intersect(Target, Me.Range("A" & lastRow)) Is Nothing Then
ApplyDateFilter Me
End If
End Sub
Переделал на cascade = {
CascadeType.MERGE,
CascadeType.PERSIST у Lesson.
В контроллере сделал удаление ID до удаления урока:
for(Client client : instructor.getClients()) {
if(client.getLesson().getId().equals(id)) {
client.setLesson(null);
}
}
Теперь удаляется только занятие, а не клиент. Не уверен, насколько целесообразно делать так, но работает.