首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >hibernate -列值的自动转换(字符串到枚举)

hibernate -列值的自动转换(字符串到枚举)
EN

Stack Overflow用户
提问于 2012-07-23 17:22:44
回答 3查看 5.7K关注 0票数 0

有没有办法做这样的事情。我有一个名为person的实体。

代码语言:javascript
运行
复制
@Entity
@Table(name = "PERSON")
public class Person {
   @Column(name = "NAME", length = 128, columnDefinition = "VARCHAR2(128)")
   String name;
   @Column(name = "NATIONALITY", length = 128, columnDefinition = "VARCHAR2(128)")
   String nationality;
}

“国籍”列有数值--每个数字都是一个国家的代码。我想要将'nationality‘字段映射到我的自定义枚举,并创建一些转换代码<->国家的方法。

代码语言:javascript
运行
复制
@Entity
@Table(name = "PERSON")
public class Person {
   @Column(name = "NAME", length = 128, columnDefinition = "VARCHAR2(128)")
   String name;
   @Column(name = "NATIONALITY", length = 128, columnDefinition = "VARCHAR2(128)")
   Nationality nationality;
}

enum Nationality {
   USA, Brazil, Germany; // etc.
}

public static Nationality codeToNationality(String code);

对于这样的事情,有没有hibernate方法?我不能修改列定义-数据库是只读的。

我想要实现的第二件事是排除任何未解析国籍代码的实体。codeToNationality(...) == null的实体对于hibernate是不可见的。

我的模型(人员、国籍)只是一个例子。

谢谢你的帮助!

EN

Stack Overflow用户

发布于 2012-07-23 17:39:21

这两个问题:

  1. 通常将枚举映射到某个字符串,而
  2. 将未知映射到null

可以通过创建适当的UserType来解决。

可以从here中找到有关枚举和自定义用户类型一些示例。自定义类型的一般描述是Hibernate documentation的一部分。

另一种选择是为枚举提供特定的setter,这些setter将与映射到数据库列的字符串值相互转换。如果仅在此实体中需要此自定义类型,则这是可行的。

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11609678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档