JPAを実際に習得しようとしていますが、@ SequenceGeneratorに問題があります。
EclipseLinkでderby埋め込みデータベースを使用しています。私は、SequenceGeneratorアノテーションをPersonエンティティのIDに適用しようとしています。
は、ここで私はそのために使用しているコードです:今@ SequenceGeneratorとDerbyEmbeddedの問題
@Id
@SequenceGenerator(name="Person_SEQ", allocationSize=5, initialValue=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="Person_SEQ")
private int id;
問題、私は(「初めて」アプリケーションを起動するたびにそれは私が以前に作成したデータ・ベースを削除し、再試行していることを意味していることです)、私はこれを得る例外:
[EL Warning]: 2011-09-17 22:25:03.649--ServerSession(31484215)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: SEQUENCE 'PERSON_SEQ' does not exist.
Error Code: 30000
Call: VALUES(NEXT VALUE FOR Person_SEQ)
Query: ValueReadQuery(sql="VALUES(NEXT VALUE FOR Person_SEQ)")
この動作は正常ですか?
_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __
私がチェックしまし生成されたcreateDLL.jdbcと、ここでPersonテーブルに関して与えられた内容を示します。
CREATE TABLE PERSON (ID INTEGER NOT NULL, FIRSTNAME VARCHAR(255), LASTNAME VARCHAR(255), NONSENSEFIELD VARCHAR(255),PRIMARY KEY (ID))
CREATE SEQUENCE Person_SEQ INCREMENT BY 5 START WITH 5
私はなぜそれが1ではなく5で始まったのだろうか?
__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __
私はいくつかの新しい人物をアプリケーション(同じデータベースでこの時間)を再起動すると、挿入時にidがこれまでallocationSizeからジャンプしていることも考え出しました。私は2番目の実行で29
- :ここに私の自己を明確にするためには、私が通過してきたシナリオです(アプリケーションをシャットダウンし、それをリニューアル後)私はまた、99
に(代わりに30 !!の)から始まるIDのプールを作成した、29人を挿入することは、組み込みDerbyこの問題ですドライバ?または私は何か他の行方不明ですか?
私が開発しようとしているアプリケーションは、同じデータベースを長期間使用することを意味するものではなく、新しい年ごとにデータベースが再生成され、IDが非常に高い値、あなたは本当に長いタイプを使用する必要があると思いますか?あなたの答えは私が期待していたものです!ありがとう –