Jasper Report: невозможно получить значение для поля 'x' класса 'org.postgresql.util.PGmoney'

Когда мне нужно получить некоторую информацию в таблице заказов, яшма не может разыграть удвоение от PGmoney. Я сначала искал в Google, но не получил результата.

Вы знаете, как это исправить?

Примечание: я использую базу данных PostgreSQL.

1 ответ

Решение

Это одна из нескольких причин, почему PostgreSQL money Тип устарел и его следует избегать. Как ни странно, более новые версии той же документации не показывают предупреждение об устаревании, но я и другие не согласны с этим и считаю, что его использование не рекомендуется.

Если это вообще возможно, измените вашу схему на использование numeric вместо этого, как numeric(17,2) если вы хотите хранить только целые числа центов или что-то более точное для промежуточных значений. У вас будет кошмар времени работы с money в HQL, до такой степени, что даже Java BigDecimal класс (обычно используется для отображения numeric поля) лучше, несмотря на ужасно неуклюжий синтаксис своей арифметики.

Я бы сделал ALTER TABLE blah ALTER COLUMN blahcol TYPE numeric(17,2) USING ( regexp_replace(blahcol::text, '[$,]', '', 'g')::numeric ); и забыть money Тип существовал на твоем месте.

Другие вопросы по тегам