2012-03-26 3 views
0

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

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

Im using: eclipselink 2.3, openjdk7, ubuntu oneiric amd64, eclipse.

HeRe некоторый код:

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

@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; 

ответ

0

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

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

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

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

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

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