我通常不会发布noob问题,但是......自从我开始编程以来,我遗失了一些东西。
让我们设想一个pojo实体对象,它有几个属性名称,描述等。其中一个是“方向”,它只能是“IN”或OUT。
该属性的最佳数据类型是什么? 我可以使用一个布尔值,例如假设为true,而假设为out。或者也许我可以使用单个字母“我”和“o”,或“枚举”..
考虑我将使用hibernate这个对象,该属性将在表的列上。那么......该列的最佳数据类型是什么?
谢谢
答案 0 :(得分:2)
我认为enum
最适合此目的。
public enum STATE {IN, OUT}
您始终可以获取保存到数据库的等效字符串。
答案 1 :(得分:2)
我会建议Enum。
优点:
当然,这意味着您应该为枚举值使用描述性名称......
答案 2 :(得分:1)
我会使用enum
并将转换为String
的枚举值存储在数据库表中。
阅读Java Enums上的文章了解相关详情。
答案 3 :(得分:1)
您可以使用枚举来表示方向
public enum Direction {
IN('i'), OUT('o');
final char dir;
Direction(char dir) {
this.dir = dir;
}
public static Direction find(char c) {
for (Direction d : Direction.values()) {
if (d.dir == c)
return d;
}
throw new IllegalArgumentException("Not found: " + c);
}
}
您可以将它绑定到数据库中的char列以及实体中的Hibernate / JPA,只需使用char类型设置列,并仅使用getter / setter公开枚举。
@Entity
public class MyEntity {
@Column
private char direction;
public Direction getDirection() {
return Direction.find(direction);
}
public void setDirection(Direction dir) {
this.direction = dir.dir;
}
}
答案 4 :(得分:1)
使用enum
。对于Hibernate,您可以使用以下映射,它将自动使用枚举值的名称来存储/检索数据库:
<type name="org.hibernate.type.EnumType">
<param name="enumClass">foo.MyEnum</param>
<!-- 12 == java.sql.Types.VARCHAR -->
<param name="type">12</param>
</type>