У меня есть класс, представляющий модель:
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 соответствует типу анома? Я нашел только небольшие страницы информации, и они не были на официальных веб-сайтах. Кажется, что таблица такой переписки вообще не существует, не так ли?
Это соответствующие типы:
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. Затем вы используете общие типы опций и никогда не будете нуждаться в том, чтобы импортировать червь в свои контроллеры.
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.
Лучший