Я работаю с картой в объекте.
В установщике я очищаю карту и затем помещаю все свои значения.Я проверяю класс, значения там.Я сохраняю сущность: значения не сохраняются, а метод save
хранилища возвращает мне сущность без значений !!!Я пытаюсь без clear
... это работает!
После некоторых экспериментов я нахожу что-то: я пытаюсь с базовой сущностью и тем же отображением.Когда типом доступа является PROPERTY, он не работает, но когда я пытаюсь использовать тип доступа FIELD, он работает.
Таким образом, проблема заключается в поведении вокруг типа acces.И, к сожалению, я не могу изменить свою иерархию классов (по некоторым рабочим причинам)
Вот свойство и получатель:
@Entity
@Access(AccessType.PROPERTY)
public class MyEntity {
private Map<MyEnum, Integer> myEnums = new EnumMap<>(MyEnum.class);
// (...)
@Override
@ElementCollection
@MapKeyColumn(name = "my_enum", columnDefinition = "enum('A', 'B', 'C')")
@MapKeyEnumerated(EnumType.STRING)
public Map<MyEnum, Integer> getMyEnums() {
return myEnums;
}
void setMyEnums(Map<MyEnum, Integer> myEnums) {
// this work
// this.myEnums= new EnumMap<>(myEnums);
// this work to (but I can't keep it because the map is not cleared)
// for (MyEnum myEnum : myEnums.keySet()) this.myEnums.put(myEnum, myEnums.get(myEnum));
// this doesn't work
this.myEnums.clear();
for (MyEnum myEnum : myEnums.keySet()) this.myEnums.put(myEnum, myEnums.get(myEnum));
}
// (...)
}
Я действительно думаю, что здесь есть проблема.
Есть ли способ работать с AccessType.PROPERTY и избежать такого поведения?Мне нужно использовать метод clear()
и тип доступа PROPERTY.
Для информации, это проект spring-boot
, и я воспроизвожу проблему с 1.5.3.RELEASE и 2.0.3.RELEASE.
Я создаю модульный тест для воспроизведения этой проблемы: https://github.com/Mohicane/jpa-accesstype