gpt4 book ai didi

java - 使用 JPA 将嵌套枚举保存到数据库

转载 作者:行者123 更新时间:2023-11-29 17:57:58 25 4
gpt4 key购买 nike

例如,我们有一个 Shops 表。每个商店都属于某个国家/地区(目前以 ENUM 形式实现)。现在我不仅需要将商店映射到一个国家,还需要映射到该国家的一个地区。

第一个想法是制作单独的表国家和地区。国家有很多地区,商店属于一个地区并通过它到达国家。但是,如果我需要能够将 Shop 映射到某个国家/地区而不指定该国家/地区的区域,该怎么办?按照我的解决方案,这是不可能的。

第二个想法是使用复杂的 ENUM。像这样:

public enum Location implements ContainsRegion {

FRANCE("France") {
public EnumSet getRegions() {
return EnumSet.allOf(FranceRegions.class);
}
},
GERMANY("Germany") {
public EnumSet getRegions() {
return EnumSet.allOF(GermanyRegions.class);
}
};

private final String country;

private Region region;

public static Location factory(String name) throws IOException {
for(Location c : values()) {
if(c.country.equalsIgnoreCase(name)) {
return c;
}
}
throw new IOException("Unknown country");
}

@JsonCreator
public static Location factory(@JsonProperty("region") Region region, @JsonProperty("name") String name) throws IOException {
Location location = factory(name);
if(isNull(region)) {
return location;
}
if(location.getRegions().contains(region)) {
location.setRegion(region);
return location;
}
throw new IOException("This region is not available for location");
}

}

它可以正常使用 JSON 序列化和反序列化,但我无法将其映射到数据库表?有什么解决办法吗?

最后一个想法是制作一个单独的实体Location:它将包含对商店、国家和地区的引用。并将作为 @OneToOne 映射到 Shop。在这种情况下,它从 Shop 实体到 Location 实体,我将能够获取/设置国家和地区,如果未指定地区,它可能只是 null。

请告诉我,完成这项任务的最佳方法是什么?谢谢!

最佳答案

这是不可能的,在 JPA 中使用枚举时您应该三思而后行。

请阅读我关于该主题的文章: https://martinelli.ch/2018/01/08/mapping-enums-with-jpa/

关于java - 使用 JPA 将嵌套枚举保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48643699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com