有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java关于“二进制”数据类型

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

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

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

考虑我将使用Hibernate这个对象,属性将放在表的列上。所以列的最佳数据类型也是什么

多谢各位


共 (5) 个答案

  1. # 1 楼答案

    我认为enum最适合这个目的

    public enum STATE {IN, OUT}
    

    您总是可以获得保存到数据库的字符串等价物

  2. # 2 楼答案

    可以使用枚举来表示方向

    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;
        }
    }
    
  3. # 3 楼答案

    使用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>
    
  4. # 4 楼答案

    我将使用enum并将转换为String的枚举值存储在数据库表中。 阅读关于Java Enums的文章以了解详细信息

  5. # 5 楼答案

    我建议使用Enum

    优点:

    • 以后可以扩展变量的可能值集 (如果有必要的话)
    • 值的名称包含关于值的语义的有价值的含义
    • 您的编程语言将帮助您进行类型检查

    当然,这意味着您应该为枚举值使用描述性名称