У меня есть объект со следующим отображением определенным:ли обновление вместо удаления/вставки для @ElementCollection Карты
@ElementCollection(fetch=FetchType.LAZY, targetClass=MyEntityTranslations.class)
@CollectionTable(name="MY_ENTITY_TRANSLATIONS", [email protected](name="PARENT_ID"))
@MapKeyColumn(name="LOCALE")
private Map<String, MyEntityTranslations> translations;
MyEntityTranslations
класса выглядит следующим образом:
@Embeddable
public class MyEntityTranslations
{
@Column(name="NAME")
private String name;
@Column(name="DESCRIPTION")
private String description;
public MyEntityTranslations()
{
}
//getters and setters
}
Таблица MY_ENTITY_TRANSLATIONS выглядит это:
CREATE TABLE MY_ENTITY_TRANSLATIONS
(
parent_id bigint NOT NULL,
locale character varying NOT NULL,
name character varying,
description character varying,
CONSTRAINT my_entity_translations_pkey PRIMARY KEY (parent_id, locale)
);
Все работает нормально и, как ожидалось, но когда я обновите имя или описание в MyEntityTranslations
, он делает DELETE, а затем INSERT вместо UPDATE.
Я подумал, может быть, добавив equals()
и hashCode()
методам в MyEntityTranslations
позволит JPA знать, нужно ли просто обновлять его. Тем не менее, я быстро понял, что у меня нет необходимой информации в MyEntityTranslations
, чтобы правильно переопределить эти методы.
После прибегая к помощи вокруг этого вопроса, я нашел много мест для этой проблемы с List
, с решением существа добавления @OrderColumn
аннотацию или изменить его на Set
. Тем не менее, я ничего не мог найти об этом для Map
.
Действительно, после внесения записи в таблицу MY_ENTITY_TRANSLATIONS ее никогда не нужно удалять, если только объект с идентификатором, равным столбцу PARENT_ID, не удаляется. Есть ли что-нибудь, что я могу сделать с сущностью или встраиваемой версией, которая позволит JPA всегда делать UPDATE вместо поведения DELETE/INSERT?
В случае, если это имеет значение, я использую PostgreSQL, Spring Data JPA и EclipseLink.
Вы должны упомянуть своего поставщика JPA - поскольку эта проблема специфична для реализации. –
@TobiasLiefke Я обновил вопрос с этой информацией (EclipseLink). – dnc253