我需要在@Embeddable对象上使用@AttributeOverride,以防止同一复杂类型的两个属性的列名发生冲突。
但是,在执行此操作时,我还会丢失/覆盖@Embedded ExternalLink对象的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;
}发布于 2020-06-09 06:44:54
我所知道的唯一方法是转换,它将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);
}
}https://stackoverflow.com/questions/56188404
复制相似问题