2010-05-26 6 views
2

Я часто использую java.lang.Integer как первичный ключ. Здесь вы можете увидеть некоторый кусок кодаКак настроить атрибут точности, используемый аннотацией @Column?

@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

Javadoc, кажется, указывает, что параметр не имеет смысла для Integer.

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

Так, казалось бы Гибернация право игнорировать его, так как тип столбца не BigDecimal и т.д., а просто сделать столбец, который содержит 32-разрядное целое число.

+0

Интересный (+1) Но если у меня есть BigInteger, чья точность больше, чем 10, он работает. Я не понимаю, почему –

+0

Неудивительно, что imo. Не будет единственным местом, где Hibernate делает что-то «работать так, как вы имели в виду», даже если оно не является строго законным или четко определено спецификацией JPA1. – Affe

2

Вы можете установить атрибут columnDefinition.

От Javadocs:

ColumnDefinition (необязательно) фрагмент SQL-, который используется при генерации DDL для столбца.

@Entity 
private class Person { 

    private Integer id; 

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

    }   

} 
+0

Спасибо (+1), Проблема с columnDefinition заключается в том, что он ** зависит от поставщика **. –

+2

Я считаю, что числовые и числовые (которые являются частью спецификации SQL и, следовательно, независимыми от поставщика) эквивалентны в Oracle, поэтому вы можете изменить его на 'NUMERIC (8,0)' – mtpettyp

Смежные вопросы