Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于「;“二进制”;数据类型_Java - Fatal编程技术网

Java 关于「;“二进制”;数据类型

Java 关于「;“二进制”;数据类型,java,Java,我通常不发布noob问题,但是。。。。自从我开始编程以来,我错过了一些东西 让我们想象一个pojo实体对象,它有几个属性名称、描述等。其中之一是“方向”,只能是“入”或“出” 该属性的最佳数据类型是什么? 我可以使用布尔值,例如,假设true作为in,false作为out。或者我可以使用单个字符“I”和“o”,或者“enum” 假设我将此对象与hibernate一起使用,则该属性将位于表的列上。所以列的最佳数据类型也是什么 谢谢我认为enum最适合这个目的 public enum STATE {

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

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

该属性的最佳数据类型是什么? 我可以使用布尔值,例如,假设true作为in,false作为out。或者我可以使用单个字符“I”和“o”,或者“enum”

假设我将此对象与hibernate一起使用,则该属性将位于表的列上。所以列的最佳数据类型也是什么


谢谢

我认为
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

我对此很感兴趣:在您的代码中,转换是隐式的吗?它就是这样工作的吗?:)数据库不知道枚举,它只存储一个字符(枚举的内部表示)。但在代码中,实体仅公开枚举,而不公开内部表示。是的,它是这样工作的