当前位置: 首页 > 面试题库 >

JPA实体中的枚举字段

吴德辉
2023-03-14
问题内容

我问这个问题有点傻,但是我找不到这个问题的简单答案。

以这个简单的实体为例:

@Entity
@Table( name="clienti" )
public class Cliente implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    private String nome;

    private String cognome;

//...
}

它代表一个人,因此我想添加一个“ 性别 ”属性。

这将是“男性”或“女性”。所以呢?

我可以使用String,并要记住,“ m”代表男性,“ f”代表女性。

或者,我可以使用布尔值“ isMale”(是或否)。

但是,我认为无论哪种情况,Hibernate纯粹主义者都不会高兴:)

仔细搜索一下,我发现最佳实践是使用 枚举

我对如何使用它有些困惑。你能帮我举个例子吗?


问题答案:

您可以将您的号码映射enumString或序号。映射到String是更可移植的方法,因为映射将在更改枚举顺序后仍然存在。

使用您的示例:

@Entity
@Table( name="clienti" )
public class Cliente implements Serializable {

...
    @Enumerated(EnumType.STRING)
    private Gender gender;
...
}

字符串映射将使用枚举类型的简单名称,因此数据库中将有两个可能的值-“ Male”和“ Female”

public enum Gender { MALE, FEMALE }

持久性提供程序负责映射,因此在您的代码中,您可以继续使用Gender枚举,而不必担心字符串或序数。



 类似资料:
  • 问题内容: 我们有一个带有枚举字段-的实体,我们想使用JPA注释-为它设置默认值。 但是,当我们将实体保存到数据库时,此字段的值为和。对于布尔字段- 正确的默认值()已保存。 如果改为使用:,则会在保存时得到以下异常: 我们做错了什么?为什么它仅适用于布尔值? 问题答案: 当某些SQL代码在未为emailCommunicationStatus列指定任何值的情况下插入一行时,您所做的工作很有用。在这

  • micronaut数据是否支持枚举字段? 我尝试创建枚举字段导致错误。使用Micronaut框架添加了类型转换器,但仍然与它所述的错误相同 <代码>java。lang.NoSuchMethodError:“作废公司。同步运行。setStatus(java.lang.String)“同步运行的位置。状态为枚举字段,该字段具有如下转换器。

  • [命名空间: Serenity.Data.Mapping] - [程序集: Serenity.Data] Serenity 有一组字段标识控制字段行为。 public enum FieldFlags { None = 0, Insertable = 1, Updatable = 2, NotNull = 4, PrimaryKey = 8, Auto

  • 我尝试使用@Enumerated annotation映射枚举类型,但得到以下错误: 我的工作:在postgres @entity@table(name=“test_table”)公共类TestTable{... @enumerated(enumtype.string)@column(name=“col”)private TestType col;...}

  • 我的JPA实体作为枚举字段 哪里 如果我用规范添加where条件 将枚举包含到规范查询中的正确方法是什么?