Создание Groovy общего списка Observable
Я использую ObjectDB, но также хочу сделать коллекцию внутри сохраняемого объекта видимой, поэтому я объявил это следующим образом:
@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL) List<Widget> widgets = [] as ObservableList
Позже я создаю закрытие слушателя и присоединяю его:
def widgetChangeListener = {
log.debug "WIDGET CHANGE: $it"
}
widgets.addPropertyChangeListener(widgetChangeListener)
Однако, когда я пытаюсь сохранить коллекцию, я получаю эту ошибку:
Attempt to store an instance of a non persistable type com.greymatter.strategy.Harness$_closure1 - field com.greymatter.strategy.Harness.widgetChangeListener (error 303)
Есть ли способ сделать эту коллекцию устойчивой, сохраняя закрытие изменчивым, чтобы я мог наблюдать за изменениями в ней? ObjectDB имеет аннотацию @Transient, но я не уверен, как применить ее к закрытию. Если я добавлю его в определение widgetChangeListener, я получу исключение MissingMethodException.
Являются ли ObjectDB и ObservableList взаимоисключающими?
1 ответ
Коллекции Groovy не полностью поддерживаются ObjectDB (и JPA в целом). См. Список поддерживаемых коллекций в JPA / ObjectDB на этой странице руководства ObjectDB.
Если ObservableList работает хорошо, за исключением прослушивателей, вы можете использовать события жизненного цикла JPA, чтобы очистить прослушиватели перед сохранением или обновлением объекта сущности (а затем сбросить их при необходимости).
В качестве альтернативы вы можете сохранить 2 списка в вашем классе сущности. Обычный список, который будет сохранен, и оболочка ObservableList этого списка, которая будет установлена как временная.