JPA спецификация ясна
Встраиваемые объекты не могут быть запрошены, сохранены, объединены независимо от их родительского объекта. Они являются строго частными (зависимыми) объектами
Вы должны использовать осторожно , потому что его продолжительность жизни ограничена продолжительностью жизни объекта-владельцаэкземпляр. Так что если вы сохраните / объедините / удалите свой экземпляр сущности-владельца, все его встраиваемые экземпляры экземпляры будут сохранены / объединены / удалены
Предположим, вы делаете что-то вроде
/**
* Let's suppose owning contains SIX embeddables instances
*/
Owning owning = manager.find(Owining.class, owningId);
Таким образом, вы измените , просто свою сущность Owning на слое представления и отправьте свои изменения.Вы извлекаете свою сущность-владелец, используя
/**
* Usually your web framework Takes care of binding your submitted data
*/
Owning owning = new Owning();
owning.setProperty(request.getParameter("property"));
. Затем вы можете объединить отправленные данные, и Think ваши экземпляры встраиваемых файлов еще сохраняются в базе данных .Что ж, давайте посмотрим
Как показано выше вы (или ваш веб-фреймворк) только что получили свойства Owning , верно ???Таким образом, ваш owning.getElementList () пуст .Поскольку owning.getElementList () пусто, JPA удалит все его экземпляры встраиваемых объектов .Имейте это в виду.
Обычно встраиваемый класс не связан ни с чем, кроме его Владельца.А при использовании набора встраиваемых файлов JPA всегда выбирают перед сохранением / обновлением, поскольку необходимо сравнить одно за другим , используя метод равных .Таким образом, вам нужна согласованная реализация равных при использовании коллекции Set.
Здесь вы можете увидеть ее аналог в Hibernate.