【问题标题】:@Enumerated(EnumType.STRING) lost with @AttributeOverride@Enumerated(EnumType.STRING) 因@AttributeOverride 而丢失
【发布时间】:2019-05-17 14:23:38
【问题描述】:

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

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

最后,表的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;
}

【问题讨论】:

  • 我使用了你的代码,一切都很好,所有列的类型都是 varchar(255)
  • 您将此架构映射到哪个数据库/后端?
  • 我正在使用 org.postgresql.Driver @MWiesner 和 Hibernate 5.0.11

标签: hibernate jpa jpa-2.0 embeddable


【解决方案1】:

我知道的唯一方法是转换器,它将 NetworkId 映射到 String (varchar)

@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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2013-12-20
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多