Java 关于「;“二进制”;数据类型
我通常不发布noob问题,但是。。。。自从我开始编程以来,我错过了一些东西 让我们想象一个pojo实体对象,它有几个属性名称、描述等。其中之一是“方向”,只能是“入”或“出” 该属性的最佳数据类型是什么? 我可以使用布尔值,例如,假设true作为in,false作为out。或者我可以使用单个字符“I”和“o”,或者“enum” 假设我将此对象与hibernate一起使用,则该属性将位于表的列上。所以列的最佳数据类型也是什么Java 关于「;“二进制”;数据类型,java,Java,我通常不发布noob问题,但是。。。。自从我开始编程以来,我错过了一些东西 让我们想象一个pojo实体对象,它有几个属性名称、描述等。其中之一是“方向”,只能是“入”或“出” 该属性的最佳数据类型是什么? 我可以使用布尔值,例如,假设true作为in,false作为out。或者我可以使用单个字符“I”和“o”,或者“enum” 假设我将此对象与hibernate一起使用,则该属性将位于表的列上。所以列的最佳数据类型也是什么 谢谢我认为enum最适合这个目的 public enum STATE {
谢谢我认为
enum
最适合这个目的
public enum STATE {IN, OUT}
您总是可以获得用于保存到数据库的等效字符串。我建议使用Enum
优点:
- 以后可以扩展变量的可能值集 (如果有必要的话)
- 值的名称包含关于值的语义的有价值的含义
- 您的编程语言将帮助您进行类型检查
当然,这意味着您应该为枚举值使用描述性名称…我将使用
enum
并将转换为字符串的枚举值存储在数据库表中。
有关它的详细信息,请阅读上的文章。您可以使用枚举来表示方向
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;
}
}
使用枚举
。对于Hibernate,您可以使用以下映射,它将自动使用枚举值的名称来存储/检索数据库:
<type name="org.hibernate.type.EnumType">
<param name="enumClass">foo.MyEnum</param>
<!-- 12 == java.sql.Types.VARCHAR -->
<param name="type">12</param>
</type>
foo.MyEnum
12
我对此很感兴趣:在您的代码中,转换是隐式的吗?它就是这样工作的吗?:)数据库不知道枚举,它只存储一个字符(枚举的内部表示)。但在代码中,实体仅公开枚举,而不公开内部表示。是的,它是这样工作的