作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,我们有一个 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/
我是一名优秀的程序员,十分优秀!