爪哇 |将字符串持久化为枚举

Posted

技术标签:

【中文标题】爪哇 |将字符串持久化为枚举【英文标题】:Java | Persisting String as enum 【发布时间】:2018-07-14 21:25:30 【问题描述】:

假设我有一个班级MyClass

public class MyClass 

  @Id
  private int id;

  @???
  private String cityName;

  // getters and setters


现在我希望我的架构包含两个表:

MyClassTable:id INT PRIMARY KEY, city INT FOREIGN KEY ON CityTable.id CityTable:id INT PRIMARY KEY,名称 VARCHAR

我是否必须为 City 创建一个具有两个属性的新类:int IdString name?是否可以仅使用 MyClass 类和 cityName 上的一些特殊注释来完成此操作?

【问题讨论】:

查看这个答案***.com/questions/15503189/… 请注意,这不是枚举(在 Java 或数据库意义上)。是的,你需要完全按照你的建议去做。 (请注意,通常最好使用包装类 IntegerLong,因为 null 值更可靠地传达“尚未持久化的实体”。) 【参考方案1】:

您应该创建表“城市”,这是一种“字典”。所以你可以把它映射到Immutable实体:

@Entity
@Immutable
@Table(name = "cities")
public class City 
    @Id private Integer id;
    private String name;

(并在数据库层填充其数据)。

那么你的“数据”实体应该有一个@ManyToOne对City实体的引用:

@Entity
@Table(name = "my_classes")
public class MyClass 

    @Id
    @GeneratedValue
    private Long id;

    // ...

    @ManyToOne
    private City city;

这将对应于以下my_classes表(例如PostgreSQL方言)-注意外键city_id

create table my_classes (
  id bigint not null constraint my_classes_pkey primary key,
  -- ...
  city_id integer constraint fk_my_classes_cities references cities
)

【讨论】:

谢谢,虽然所有新的迷你类(Id-value)的引入导致了一堆新问题的出现。

以上是关于爪哇 |将字符串持久化为枚举的主要内容,如果未能解决你的问题,请参考以下文章

C# - Web API - 将枚举序列化为带空格的字符串

将json字符反序列化为枚举

ASP.NET MVC Core API 将枚举序列化为字符串

Newton.JSON将数字序列化为枚举项[重复]

爪哇。如何将随机字符行转换为字符串? [复制]

使用 URL 字符串获取 IP 地址? (爪哇)