2012-05-17 1 views
0

У меня есть два примера для сопоставления @Embeddable с картой.обновляемый и вставляемый в @MapKeyColumn для Map на основе @ElementCollection

http://hwellmann.blogspot.com/2010/07/jpa-20-mapping-map.html

http://www.objectdb.com/api/java/jpa/MapKeyColumn

Один говорит

@MapKeyColumn(..., insertable = false, updatable = false) 

А другой говорит

@MapKeyColumn(...) // without insertable = false, updatable = false 

Может кто-нибудь пожалуйста, скажите мне, какой из них прав?

ответ

2

Только второй из ваших примеров касается картирования @Embeddable. Первая - около Map<String, String> коллекция элементов - в нее не включены встраиваемые вложения.

Причина, по которой вставляемые и обновляемые значения устанавливаются как ложные во втором, заключается в том, что свойство «language» в коллекции элементов доступно через оба ключа карты и значение карты. Наличие одного из них, как только для чтения, сохраняет противоречивые данные в ключе карты и в свойстве «язык».

Установка вставляемого и обновляемого значения false не требуется для Map<String, String>, потому что только ключ карты отображается только один раз.

+0

Итак, '' в порядке с '@ MapKeyColumn' и' 'должно быть в порядке с' '@MapKeyColumn (u = f, i = f)'? Затем я должен пойти для '' –

+0

Wit , у вас нет двух сопоставлений с одним и тем же постоянным атрибутом, а с возможностью встраивания возможно, когда ключ карты является одним из атрибутов Embeddable. Вероятно, для неверно, если вам кажется, что нужно иметь отношение к Embeddable. –

+0

Вау, теперь я так понимаю, почему 'updatable = false, insertable = false' необходимо, когда' '. Вилен Данк! Возможно ли, что эти атрибуты не нужны, если ключ карты не является «встраиваемым»? –