如何控制枚举的列大小?

时间:2011-09-29 16:12:28

标签: jpa jpa-2.0

这是通过JPA的EclipseLink,我让它为我创建表。后端数据库是Derby for development模式,我希望使用MySQL或其他东西进行部署。

在我的实体中,我有一个枚举:

@Entity
public class Thing implements Serializable {

    public enum Choice { Able, Baker, Charlie, Delta }

    @Column(precision = 1)
    private Choice  choiceValue;

    // etc
}

枚举序号只需要一位数字,但是当表格创建时,它会为其分配10位数字。因此,一百万条记录将浪费9兆字节。 “precision = 1”一词被忽略。

有没有办法让它只使用一个字节来编码枚举?

1 个答案:

答案 0 :(得分:2)

设置整数列的比例或精度,其中枚举在Derby&中映射。 EclipseLink没有帮助。它什么都不做,无论如何你最终会得到INTEGER。您可以通过以下方式获得更多控制权

@Column(columnDefinition = "SMALLINT") //smallint= 2 bytes or
//@Column(columnDefinition = "NUMERIC(1)") //
private Choice  choiceValue;

它对我有用,但基本上NUMERIC的Java类型是BigDecimal,对于SMALLINT短,可能在某些情况下会产生问题。例如,本机查询将返回BigDecimal for choiceValue-column。

需要多少存储空间取决于数据库提供程序,每个数字的一​​些较旧的MySQL存储字符,现在它似乎很好地调整:http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html我不知道它是如何在Derby,但我会假设它不超过字节。