Типы из Postgresql и типы из Play (анорм)

1

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

class Payment(
  val id: Pk[Int] = NotAssigned,
  //.....
)

Вот как это определено в db:

CREATE TABLE payment
(
  id serial NOT NULL,
  //.........
)

Он выдает исключение java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer Я получаю такое исключение в проекте довольно часто. Я полагаю, потому что я использую неправильные типы данных в Play (anorm) и Postgresql, то есть они не соответствуют друг другу правильно.

Итак, где я могу узнать, какой тип Postresql соответствует типу анома? Я нашел только небольшие страницы информации, и они не были на официальных веб-сайтах. Кажется, что таблица такой переписки вообще не существует, не так ли?

Теги:
playframework
anorm

2 ответа

1

Это соответствующие типы:

1) Int в scala и integer/serial в postgresql - 32 бита, и оба идут до 2 147 483 647. Сегмент Postgresql представляет собой только число с автоматическим добавлением.

2) Длинные в scala и bigint/bigserial в postgresql - 64 бита, и оба идут до 9,223,372,036,854,775,807. Postgresql bigserial - это только auto-incrementing bigint.

Если вы хотите использовать одни и те же типы, вы можете использовать bigserial/Long или serial/Int.

Однако для наших проектов мы закончили использование Long in Scala и сериала в postgresql, и это отлично работает. Это дает нам возможность просто изменить тип данных в postgersql от серийного до bigserial, если это потребуется в будущем.

В качестве побочной заметки мы не могли увидеть никакого реального преимущества для Pk [..], поэтому решили использовать Option [Long] вместо Pk [Long] и None вместо NotAssigned. Затем вы используете общие типы опций и никогда не будете нуждаться в том, чтобы импортировать червь в свои контроллеры.

  • 0
    но я спрашиваю о всех типах.
0

Anorm не зависит от базы данных, он не заботится о конкретном типе поставщика БД, а о типах JDBC. Вы можете найти сопоставления типов JDBC в документе Oracle: http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/mapping.html#table1.

Anorm, включенный в Play 2.3 (последняя версия), заботится о более цифровом преобразовании. Вы можете найти информацию по адресу http://applicius-en.tumblr.com/post/87829484643/anorm-whats-new-play-2-3.

Если у вас все еще есть проблема с новостями с последним анонимным, вы можете добавить проблему в проект gigub Play.

Лучший

Ещё вопросы

Сообщество Overcoder
Наверх
Меню