hibernate - JPA 实体中的枚举字段

标签 hibernate jpa enums

我觉得问这个问题有点愚蠢,但我找不到这个问题的任何简单答案。

以这个简单的实体为例:

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

//...
}

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

它将是“男性”或“女性”。那又怎样?

我可以使用字符串,并记住“m”代表男性,“f”代表女性。

或者我可以使用 bool 值“isMale”,true 或 false。

但是,我认为在这两种情况下 Hibernate 纯粹主义者都不会高兴:)

谷歌搜索了一下,我发现最佳实践是使用枚举

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

最佳答案

您可以将枚举映射到字符串或序数。映射到 String 是更可移植的方法,因为映射将在更改枚举顺序后继续存在。

使用您的示例:

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

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

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

public enum Gender { MALE, FEMALE }

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

关于hibernate - JPA 实体中的枚举字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14437384/

相关文章:

java - Hibernate:相对于自定义@Transactional(timeout)的默认事务超时

c - 声明一个输出为枚举的函数

c# - 使用枚举值

java - 从 Hibernate hbm 到 JPA 注释,一个具有挑战性的任务

C++ - 将类型映射到枚举

java - 当 'hibernate.dialect' 未使用 spring-boot 设置时,对 DialectResolutionInfo 的访问不能为 null

java - Hibernate IllegalArgumentException 调用 setter

Hibernate 4.3.6 日志记录不适用于 log4j2

java - JPA - 自动重新加载 @OneToMany 依赖项

Java持久性-创建查询失败