Как настроить атрибут точности, используемый аннотацией @Column? - PullRequest
2 голосов
/ 27 мая 2010

Я часто использую 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 ]

2 голосов
/ 27 мая 2010

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

Из Javadocs:

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

@Entity
private class Person {

    private Integer id;

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

    }        

}
2 голосов
/ 27 мая 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...