爪哇 |将字符串持久化为枚举
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 Id
和 String name
?是否可以仅使用 MyClass
类和 cityName
上的一些特殊注释来完成此操作?
【问题讨论】:
查看这个答案***.com/questions/15503189/… 请注意,这不是枚举(在 Java 或数据库意义上)。是的,你需要完全按照你的建议去做。 (请注意,通常最好使用包装类Integer
或 Long
,因为 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)的引入导致了一堆新问题的出现。以上是关于爪哇 |将字符串持久化为枚举的主要内容,如果未能解决你的问题,请参考以下文章