Java |将字符串持久化为枚举

时间:2018-07-14 21:25:30

标签: java spring hibernate orm spring-data-jpa

假设我有一个MyClass类:

public class MyClass {

  @Id
  private int id;

  @???
  private String cityName;

  // getters and setters

}

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

  • MyClassTable :id INT主键,城市INT外键ON CityTable.id
  • CityTable :id INT主键,名称为VARCHAR

我是否必须为城市创建一个具有两个属性的新类:int IdString name?是否可以仅使用MyClass类并在cityName上添加一些特殊注释来实现此目的?

1 个答案:

答案 0 :(得分:1)

您应该创建表“ city”,这是一种“字典”。因此,您可以将其映射到Immutable实体:

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

(并将其数据填充到数据库层)。

然后,您的“数据”实体应具有对City实体的@ManyToOne引用:

@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
)