@ Enumerated(EnumType.STRING)因@AttributeOverride而丢失

问题描述 投票:0回答:1

我需要在@AttributeOverride对象上使用@Embeddable,以防止相同复杂类型的两个属性的列名冲突。

但是,这样做时,我也会丢失/覆盖@Enumerated networkId对象的@Embedded属性的ExternalLink注释。

最后,表的列link_network的类型为integer,而不是varyingchar(255)

如何配置@AttributeOverride以保持@Enumerated配置?

这是我的架构:

@Embeddable
public class Address {

    @Embedded
    @AttributeOverrides({
        @AttributeOverride(name="network", column=@Column(name="link_network")),
        @AttributeOverride(name="networkAddress", column=@Column(name="link_network_address")),
        @AttributeOverride(name="element", column=@Column(name="link_element"))
    })
    private ExternalLink link;

    @Embedded
    @AttributeOverrides({
        @AttributeOverride(name="network", column=@Column(name="before_network")),
        @AttributeOverride(name="networkAddress", column=@Column(name="before_network_address")),
        @AttributeOverride(name="element", column=@Column(name="before_element"))
    })
    private ExternalLink before;
}

@Embeddable
public class ExternalLink {

    @Enumerated(EnumType.STRING)
    private NetworkId network;
    private String networkAddress;
    private String element;
}
hibernate jpa jpa-2.0 embeddable
1个回答
0
投票
@Converter(autoApply = true) public class NetworkIdConverter implements AttributeConverter<NetworkId , String> { @Override public String convertToDatabaseColumn(NetworkId attribute) { if (attribute == null) { return null; } return attribute.name(); } @Override public NetworkId convertToEntityAttribute(String dbData) { if (dbData == null) { return null; } return NetworkId.valueOf(dbData); } }
© www.soinside.com 2019 - 2024. All rights reserved.