Примечание Это было незамедлительно fixed от Steve Ebersole, оно включено в Hibernate 5.2.3. Если вы застряли в более ранних версиях, я добавлю обходной путь в качестве ответа.Переименование Встроенные данные в ElementCollection
У меня есть следующие рабочие настройки:
An Embeddable
(шаблонного удалена для удобства чтения)
@Embeddable
public class TypeValue {
String type;
@Column(columnDefinition = "TEXT")
String value;
}
И Entity
(шаблонный удалена для удобства чтения)
@Entity
public class AggregatedTypeValue {
@Id
UUID id;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "type", column = @Column(name = "content_type")),
@AttributeOverride(name = "value", column = @Column(name = "content_value"))
})
TypeValue content;
@ElementCollection(fetch = FetchType.EAGER)
@MapKeyColumn(name = "attribute_name")
Map<String, TypeValue> attributes;
}
Как вы можете видеть Я использовал MapKeyColumn
для переименования столбца, в котором хранится ключ карты. Это отлично работает. Однако я также хочу переименовать столбцы, используемые для Embaddable
.
Из того, что я нашел, что это должно быть возможно с помощью AttributeOverride
:
@ElementCollection(fetch = FetchType.EAGER)
@AttributeOverrides({
@AttributeOverride(name = "value.type", column = @Column(name = "attribute_type")),
@AttributeOverride(name = "value.value", column = @Column(name = "attribute_value"))
})
@MapKeyColumn(name = "attribute_name")
Map<String, TypeValue> attributes;
Однако, это приводит к типу
- и значения в таблице сбора переименованы правильно
- колонна хранения ключ называется «значение» (
MapKeyColumn
игнорируется) - сохранен дополнительный столбец «хэш», который становится частью первичный ключ и, по-видимому, является результатом вызова
hashCode
на ключ.
Есть ли способ переименовать столбцы соответственно?
редактировать Я использую Hibernate 5.2.2.Final
FWIW Ваш код в порядке, и следует, что говорит спецификация. MapKeyColumn должен поддерживаться, и не должно быть никаких дополнительных повторяющихся столбцов, добавленных в реализацию. Сообщить об ошибке, возможно, –
Это уже зарегистрированная ошибка: https://hibernate.atlassian.net/browse/HHH-8630 –
Удивительно, спасибо за исправление! – Mene