1
注意這是及時的fixedSteve Ebersole,它包含在Hibernate 5.2.3中。如果您遇到早期版本問題,我會添加一個解決方法作爲答案。重命名ElementCollection中的嵌入數據
我有以下工作設置:
的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應該被支持,並且實現中不應該添加額外的持久化列。作爲bug報告可能 –
它已經是一個報告的bug:https://hibernate.atlassian.net/browse/HHH-8630 –
真棒,感謝修復! – Mene