2012-06-08 4 views
8

Я использую API javax.persistence и Hibernate для создания аннотаций и сохраняющихся сущностей и их атрибутов в базе данных Oracle 11g Express.BigDecimal точность не сохраняется с аннотациями JPA

У меня есть следующий атрибут в объекте:

@Column(precision = 12, scale = 9) 
private BigDecimal weightedScore; 

Цель состоит в том, чтобы оставаться десятичное значение максимум 12 цифр и максимум 9 из этих цифр справа от десятичной точки.

После вычисления weightedScore результат равен 0,1234, но как только я фиксирую объект с базой данных Oracle, значение отображается как 0.12.

Это можно увидеть, используя объект EntityManager для запроса записи или путем непосредственного просмотра в интерфейсе Oracle Application Express (Apex) в веб-браузере.

Как я должен аннотировать свой атрибут BigDecimal, чтобы точность сохранялась правильно?

Примечание: Мы используем базу данных HSQL в памяти для выполнения наших модульных тестов и не испытываем проблемы с отсутствием точности с аннотацией @Column или без нее.

Update:

Глядя на описание таблицы, определение weightedScore столбца NUMBER(19, 2). Я также попытался изменить аннотацию на @Column(columnDefinition="Number(12, 9)"), но это не повлияло. Кто-нибудь знает, почему Oracle не отвечает на эти аннотации?

ответ

5

Я нашел ответ. Ура!

Я попытался выполнить следующий запрос через интерфейс Oracle Apex:

alter table NODE modify (WEIGHTEDSCORE NUMBER(12, 9));

я получил сообщение об ошибке с указанием, что столбец, содержащий данные не может быть изменен, чтобы иметь меньшую точность или меньше масштаба. Это была моя проблема!

Поскольку я пытался изменить таблицу с существующими данными, мне нужно было либо сбросить таблицу, либо повторно инициализировать ее, либо изменить столбец, чтобы иметь больше точности и масштаба.

Я попытался следующий запрос с успехом:

alter table NODE modify (WEIGHTEDSCORE NUMBER(26, 9));

Рассуждение является то, что я хочу, чтобы добавить 7 мест точности справа от десятичной, так что я добавляю 7 к общей точностью компенсировать увеличение масштаба. Таким образом, столбец может сохранить всю существующую точность слева от десятичной точки, одновременно добавляя точность с правой стороны.

1

Кажется, вы не только один, имеющие проблемы с этим: http://www.eclipse.org/forums/index.php/m/716826/

+0

В отчете об ошибке также говорится, что ошибка применяется только к значениям, превышающим 9,223,372,036,854,775,808, и что это было _fixed_. – Ben

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