Мне нужно сохранить сложную древовидную структуру объекта, используя JPA.JPA: сохранить карту, включая исходное значение «ключ»
Существует класс «верхнего уровня», на котором я могу выполнить CASCADE.ALL, но у меня есть проблема с под-объектом класса B и поля HashMap.
«Ключ» Карты - это хэш-код самого объекта, который хранится как «значение».
Когда я каскад сохраняю объект B, однако столбец «ключ» в базе данных всегда «null» (почему?), Хотя у объекта есть несколько пар ключей.
Я пробовал некоторые вещи, такие как @MapKey, но когда я позже загружаю объект из базы данных, значение ключа больше не является хэш-кодом, а автоматически генерируемым id (что не полезно для меня).
Я также попробовал @ElementCollection для карты, но затем я получаю ошибку синхронизации (я думаю, это связано с тем, что я запускаю все это только из класса верхнего уровня и некоторой точки objectd).
@Entity
public class B
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToMany(cascade = CascadeType.ALL)
//Tried @MapKey or @ElementCollection
public Map<Integer, OtherEntity> otherEntities;
Спасибо за любую помощь, Alex
Так что это означает, что моим другим объектамEntity требуется новое поле переменной, в котором хранится их hascode? Извините, если это вопрос сбрасывания. Я новичок .. –
Да. Поэтому вы должны помнить, чтобы обновлять его, когда вы изменяете значения полей объекта сущности. Я не знаю, почему вы выбрали ключи для hascodes (если вы не используете хэш-коды DB, но тогда java не будет знать о них). Чтобы убедиться, что hashValue всегда обновляется, вы можете вызвать метод пересчета перед каждым обновлением/сохранением JPA. Http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Events – Zielu