JPA中关于枚举的设计

发布于 2021-11-23 20:27:04 字数 613 浏览 820 评论 4

平常设计数据库时会遇到性别,状态等等其他一些枚举类型的字段。一般会有一个枚举表管理这些枚举,枚举表的字段有“关联的表名”、“关联字段名”、“枚举值”、“枚举名称”,实际存储在数据库中的是枚举值,但是在页面展现的经常用到的是枚举名称,如果是用普通SQL查询的话关联枚举表就出来,但是使用JPA,映射成实体类,这个要怎么设计呢,大神们给点意见。

一般如果枚举值是固定的话,如性别,把字段设计成枚举类型

class Person {
    ...
    private Gender gender;

    public enum Gender {
        male, female
    }
}

如果gender是保存在枚举表里的

class Person {
    ...
    private Integer gender;

}

从数据库查出Person,如何在界面显示gender为“男,女”?


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

无人问我粥可暖 2021-11-29 09:03:09

其实我想问的就是这种使用枚举字典的情况,查出来的对象不知道要怎么去进行枚举翻译

浮生未歇 2021-11-29 06:10:06

那是肯定。

囚你心 2021-11-28 17:36:29

那对于那种使用枚举字典的呢?字段就不好定义成枚举类型了

成熟的代价 2021-11-24 14:58:16

使用JPA映射,枚举在数据库中的字段存储不是枚举型,而是字符或数字类型的。使用注解@Enumerated,参数指定保存的值如果是字符类型的表示:

@Enumerated(EnumType.STRING)

用数字表示:

@Enumerated(EnumType.ORDINAL)

其中,数字是用枚举的定义顺序表示的。在你的枚举值里male为0,female为1,以此类推。

用实体注解的写法示例如下:

@Enumerated(EnumType.STRING)
@Column(name = "GENDER", insertable = true, updatable = true, length = 1)
public Gender getGender() {
	return gender;
}

至于如何显示“男”,“女”,把你的枚举类调整一下,person.gender.getName()就可以了。(同时建议你把枚举改为大写,把枚举类单独拿出来定义)

public enum Gender {
	
	 MALE("男"),
     FEMALE("女");
  
     
     private String name;
     
     
     public String getName() {
        return name;
     }
     
     
     Gender(String name) {
        this.name = name;
     }
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文