我非常习惯Django 'choices' option的模型字段:
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
对于模型字段,它允许轻松地将数据库值与(表示)字符串匹配。并且可以选择任何sql类型(Char,Int ...)
在JPA中,这是不可能的;你可以制作一个枚举:但只能使用它的序数或字符串。我发现过于限制和复杂。
是否有游戏!类似于Django choices
的东西,特别是与CRUD一起使用?
或者至少是CRUD的模式,而不仅仅是为模型字段声明一个简单的String或int?
相关:
答案 0 :(得分:1)
我不明白您使用Enum的问题,您可以像这样使用JPA映射enum
@Enumerated(EnumType.STRING)
public GenderChoice genderChoice;
在代码中使用枚举。这还不够吗?
答案 1 :(得分:1)
基于@SebCesbron评论这是我现在使用的那种模式......
@Required
@Enumerated(EnumType.STRING)
public MyEnumType myenum;
public enum MyEnumType {
ENUMONE ("label one", 1),
ENUMTWO ("label two", 2);
String label;
Int value;
CastType(String label, Int value) {
this.value = value;
this.label = label;
}
@Override
public String toString() {
return this.label;
}
public Int getValue() {
return this.value;
}
public String getLabel()
{
return label;
}
}
使用EnumType.STRING
数据库将包含枚举项名称 - 覆盖toString
不会影响该名称,因为JPA使用最终的name()
。
那么我的确切用法和问题是:
@Required
@Enumerated(EnumType.STRING)
public GenderEnum myenum;
public enum GenderEnum {
M ("Male"),
F ("Female");
String label;
CastType(String label) {
this.value = value;
}
@Override
public String toString() {
return this.label;
}
}