如何设置@Column注释使用的精度属性?

时间:2010-05-26 21:10:35

标签: java hibernate orm

我经常使用java.lang.Integer作为主键。在这里你可以看到一些代码

@Entity
private class Person {

    private Integer id;

    @Id
    @Column(precision=8, nullable=false) 
    public Integer getId() {

    }        

}

我需要设置其精度属性值等于8 。但是,在导出模式(Oracle)时,它无法按预期工作。

AnnotationConfiguration configuration = new AnnotationConfiguration();
configuration
    .addAnnotatedClass(Person.class)
    .setProperty(Environment.DIALECT, "org.hibernate.dialect.OracleDialect")
    .setProperty(Environment.DRIVER, "oracle.jdbc.driver.OracleDriver");

SchemaExport schema = new SchemaExport(configuration);
schema.setOutputFile("schema.sql");

schema.create(true, false);

schema.sql输出

create table Person (id number(10,0) not null)

我总是得到10 。是否有一些解决方法可以获得8而不是10?

2 个答案:

答案 0 :(得分:2)

Javadoc似乎表明参数对于Integer来说根本没有意义。

http://java.sun.com/javaee/5/docs/api/javax/persistence/Column.html#precision%28%29

所以看来hibernate忽略它是正确的,因为你的列类型不是BigDecimal等,只是创建一个包含32位整数的列。

答案 1 :(得分:2)

您可以设置columnDefinition属性。

来自Javadocs:

  

columnDefinition             (可选)生成DDL时使用的SQL片段   对于专栏。

@Entity
private class Person {

    private Integer id;

    @Id
    @Column( columnDefinition="number(8,0)", nullable=false) 
    public Integer getId() {

    }        

}