2015-05-31 2 views
0

Использование примера в документации: У меня есть Доктора и Пациенты, которые подключены по таблице соединений. Теперь я удалить пациента от врача, который работает хорошо, то есть строки в таблице присоединиться к нулю:Удаление записи в таблице соединений отношения «многие ко многим»

doctor.remove(patient); 

Есть ли способ, что я могу получить оставшиеся (N-1) пациентов без перезагрузки Доктор из базы данных, т. е.

doctor.getAll(Patient.class); 

При выполнении этого без перезарядки Доктора я все равно получаю только что удаленную запись. Также очистка кеша не работает. Только когда я также перезаряжаю врача из базы данных, удаленная запись исчезла. Это единственный способ, который работает?

ответ

0

Именно так работает каркас. Этот код:

doctor.remove(patient); 

удаляет запись из таблицы соединений. После этого звонки:

doctor.getAll(Patient.class); 

не будет возвращен удаленному пациенту. Я проверил это, написав дополнительный метод тестирования в https://github.com/javalite/activejdbc/blob/master/activejdbc/src/test/java/org/javalite/activejdbc/Many2ManyRelationshipTest.java.

Вот тест я добавил: https://gist.github.com/ipolevoy/821e986c5c7deb28a90d Как вы можете видеть, строка 9 получает только один пациент, потому что другая была удалена по линии 7.

Вы можете включить вход в систему: http://javalite.io/logging, чтобы увидеть, что ведомостям Framework выполняется.

+0

Ведение журнала выглядит нормально. В вашем коде я вижу, что доктор кэширован, а пациент - нет. Является ли это преднамеренным или имеет значение? – valley

+0

Доктор кэшируется для другого теста. В вашем случае это не имеет значения. – ipolevoy

+0

Действительно странно. Пожалуйста, взгляните на мои комментарии ниже вашего нового смысла. – valley