Что происходит с Java Short с PostgreSequence? - PullRequest
0 голосов
/ 26 марта 2012

Эй, я не ожидал этого. Я использую JPA SequenceGenerator для моих числовых простых ключей, работает из коробки. Эй, но что случилось с шортами Java. Когда у моих сущностей короткий идентификатор, последовательность не генерирует значение, вместо этого она всегда присваивает 0, что приводит к дублированию ключа. : S.

Я только я, или вы не можете сопоставить короткое замыкание с объектом последовательности? Он создает последовательность в базе данных, но не вызывает nexval для него.

Я использую: eclipselink 2.3, openjdk7, ubuntu oneiric amd64, eclipse.

Вот какой-то код:

Это работает:

@Id @GeneratedValue(strategy= GenerationType.SEQUENCE,generator="CategoriaDeportiva_SEQ")
@SequenceGenerator(name = "CategoriaDeportiva_SEQ", allocationSize=1, initialValue=1, sequenceName="CategoriaDeportiva_SEQ")
private int id;

Это не:

@Id @GeneratedValue(strategy= GenerationType.SEQUENCE,generator="CategoriaDeportiva_SEQ")
@SequenceGenerator(name = "CategoriaDeportiva_SEQ", allocationSize=1, initialValue=1, sequenceName="CategoriaDeportiva_SEQ")
private short id;

1 Ответ

0 голосов
/ 26 марта 2012

Это странно. Получаете ли вы какие-либо ошибки в своих журналах, какой SQL регистрируется, если вы устанавливаете протоколирование EclipseLink как наилучшее?

Это проблема либо с Postgres, либо с EclipseLink. Может возникнуть некоторая проблема с привязкой короткого замыкания в Postgres, чтобы обойти это, вы можете использовать @Convert и @TypeConverter (dataType = Integer.class) в отображении @Id, чтобы вместо этого связать его как int.

Вы также можете попробовать его в другой базе данных, чтобы убедиться, что это проблема Postgres.

Если это проблема EclipseLink, пожалуйста, зарегистрируйте ошибку.

В общем, использование короткого замыкания в качестве идентификатора не очень хорошая идея, было бы очень легко исчерпать идентификаторы. Даже использование int не рекомендуется, long лучше.

...