关于“二进制”数据类型

时间:2012-02-29 12:06:52

标签: java

我通常不会发布noob问题,但是......自从我开始编程以来,我遗失了一些东西。

让我们设想一个pojo实体对象,它有几个属性名称,描述等。其中一个是“方向”,它只能是“IN”或OUT。

该属性的最佳数据类型是什么? 我可以使用一个布尔值,例如假设为true,而假设为out。或者也许我可以使用单个字母“我”和“o”,或“枚举”..

考虑我将使用hibernate这个对象,该属性将在表的列上。那么......该列的最佳数据类型是什么?

谢谢

5 个答案:

答案 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>