2012-03-26 10 views
0

ねえ、私はそれを期待していませんでした。 JPA SequenceGeneratorを数値のプリミティブキーに使用していますが、そのまま使用できます。ちょっと、しかし、Javaのショートパンツに起こります。私のエンティティが短いIDを持つ場合、シーケンスは値を生成せず、代わりにallways 0を代入して重複キーを引き起こします。 :S。PostgreSequenceでJava Shortに何が起こっていますか?

私だけですか、または短いオブジェクトをシーケンスオブジェクトにマップできませんか?それはデータベースにsequeceを作成しますが、その上に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; 

このdoesntの:

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

答えて

0

奇数です。あなたのログにエラーがありますか、最善の状態にするためにEclipseLinkログを設定すると、どのようなSQLが記録されますか?

これはPostgresの問題またはEclipseLinkの問題です。 @Idマッピングの代わりに@Convertと@TypeConverter(dataType = Integer.class)を使用して、代わりにintとしてバインドすることで回避することができます。

また、別のデータベースで試して、Postgresの問題であるかどうかを確認することもできます。

EclipseLinkの問題の場合は、バグを記録してください。

一般的に、IDとして短いものを使用するのは非常に良いアイデアではありませんが、Idを使い切るのは非常に簡単です。 intを使用しても推奨されませんが、最長です。