注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
に使用されている列の名前を変更することもできます。
@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;
しかし、これは正しく
- 型と値になり:私はこれが
AttributeOverride
を使用して可能であるべき見つけたものからキーの名前は「値」(
MapKeyColumn
は無視されます) - 追加の「ハッシュ」列が格納され、これがプライマリキーと明らかにキーの
hashCode
への呼び出しの結果です。
これに応じて列の名前を変更する方法はありますか?
編集 すると、私は休止状態5.2.2.Final
FWIWコードは問題なく、仕様に従います。 MapKeyColumnはサポートされている必要があり、実装によって追加された永続的な列はもう存在しません。おそらくバグとして報告する –
これはすでに報告されているバグです:https://hibernate.atlassian.net/browse/HHH-8630 –
素晴らしい、ありがとう! – Mene