Hibernate - Enum vs Int

时间:2013-01-30 15:07:28

标签: java oracle hibernate

关于性能的问题,最终将导致我如何设置表结构。

我有表A,B,C和D.

表B,C和D映射到枚举,其中我正在做的是将序数值映射到枚举值。

Table B:
ID: 1  String: ENUM_STR_VALUE
ID: 2  String: ENUM_STR_VALUE

表A具有以下架构

Name           Null       Type
------------------------------
ID         Not Null   Number(32)
Timestamp  Not Null   Date
Item_Type  Not Null   Number (32)
Item2_Type Not Null   Number (32)
Item3_Type Not Null   Number (32)

在表A中...... Item_Type,Item2_Type和Item3_Type分别是表B,C和D的序数值。

我的问题归结为如何向用户显示内容。

在我的A.java中,我有以下代码:

@Entity
@Table(name = "a")
public classs A{
  private int item_type;
  private int item2_type;
  private int item3_type;


  @Column(name="Item_type")
  public nit getItem_type(){
      return item_type; 
  }

我应该放弃这种规范化并制作item_types varchars并利用Hibernate的@Enumerated属性吗?或者有没有办法可以映射回来并向用户显示值。原因是我想最终查询那些项目类型&通过int搜索应该比varchar更快。

1 个答案:

答案 0 :(得分:2)

使用@Enumerated(EnumType.ORDINAL),您将在实体中拥有枚举,映射为数据库表中的序数int值。这是枚举的默认映射,如果我没有弄错的话,你甚至可以删除@Enumerated注释,Hibernate会自动将枚举作为int保存。

PS:您还应该尊重Java命名约定:item_type应该是itemType,而getItem_type()应该是getItemType()