关于性能的问题,最终将导致我如何设置表结构。
我有表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更快。
答案 0 :(得分:2)
使用@Enumerated(EnumType.ORDINAL)
,您将在实体中拥有枚举,映射为数据库表中的序数int值。这是枚举的默认映射,如果我没有弄错的话,你甚至可以删除@Enumerated
注释,Hibernate会自动将枚举作为int保存。
PS:您还应该尊重Java命名约定:item_type
应该是itemType
,而getItem_type()
应该是getItemType()
。