2014-02-05 3 views
7

Я использую Hibernate как наше объектно-реляционное сопоставление с пользовательским диалектом для неясной базы данных.Hibernate - сопоставление столбцов BigDecimal для пользовательского диалекта

Платформа Entity Я извлечения из этой базы данных имеет столбец, таким образом:

@Column(name = "GROSS_WEIGHT", precision = 9, scale = 3) 
    private BigDecimal grossWeight; 

База данных содержит этот столбец, определенный как числовые с точностью до 9 и масштаба 3.

я могу см. SQL, который Hibernate генерирует для извлечения данных, и когда я выполняю тот же запрос с помощью инструмента запроса базы данных, он возвращает «9.68» для столбца GROSS_WEIGHT.

Однако в объекте, полученном Hibernate, поле 'grossWeight' содержит значение '10', с scale из 0 и precision из 2!

в пользовательском классе диалекте, я использую я пытался перекрывая следующие типы столбцов:

 registerColumnType(Types.DECIMAL, "numeric($p,$s)"); 
     registerColumnType(Types.DOUBLE, "numeric($p,$s)"); 
     registerColumnType(Types.NUMERIC, "numeric($p,$s)"); 

но замирает возвращает только (округленный) целое число.

Это работало в другом месте приложения, где мы извлекаем объекты из Postgres, используя диалект Postgres.

Любая идея, что я должен делать на диалекте, чтобы я мог заставить Hibernate правильно установить точность/масштаб получаемого BigDecimal?

ответ

8

OK, после загрузки источников Hibernate и перешагнув их через отладчик в NetBeans, я обнаружил, что проблема заключается в подклассе драйвера JDBC-владельца, а не в Hibernate.

Метод getBigDecimal всегда возвращает значение с масштабом 0.

Когда я связался с разработчиком драйвера JDBC, он заметил ошибку и установил ее.

+0

Какая база данных и какой драйвер/версия JDBC? –

+2

«База данных» на самом деле является проприетарным движком RDBMS под названием «Genesis» поверх индексированных файлов Vision Acobobol (теперь MicroFocus). Драйвер называется «Vortex». И драйвер, и двигатель написаны [Trifox Inc] (http://www.trifox.com/index.html), но проданы/распространены [MicroFocus] (https://www.microfocus.com/media/data -sheet/acuxdbc_tcm6-1136.pdf) – DuncanKinnear

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