2012-03-26 5 views
2

主キーに次の注釈を持つエンティティクラスがあります:@GeneratedValue(strategy = GenerationType.AUTO)。私はpersistに、このクラスのインスタンスをしようとすると、しかし、私はOpenJPA 1 - シーケンステーブルが作成されていません

ます。com.microsoft.sqlserver.jdbc.SQLServerException取得:無効なオブジェクト名「OPENJPA_SEQUENCE_TABLE」。

テーブルcom.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)でデータベースに存在しない間違いを探しています。ユーザーがデータベースに接続しているので、テーブルを作成できます。自動的にOPENJPA_SEQUENCE_TABLEを作成する必要がありますか、それともそれを行う必要がありますか?もしそうなら、期待しているテーブルスキーマは何ですか?私はopenjpa-1.2.2.jarを使用しています。

編集:私はそれがコマンドラインでシーケンステーブルを追加するオプションを持っているのでmain()'s JavaDocに見えたが、OpenJPAの-1.2.2.jarがでorg.apache.openjpa.jdbc.schema.TableJDBCSequence存在しません。 org.apache.openjpa.jdbc.schemaはありますが、TableJDBCSequenceは含まれていません。

答えて

5

デフォルトでは、persistence.xmlにSynchronizeMappingsプロパティが有効になっていない限り、OpenJPAは自動的にテーブル(シーケンステーブルを含む)を作成しません。

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> 

ます。また、スキーマスクリプトを生成するには、コマンドラインからOpenJPAのMappingToolを使用することができます:

私はそれをするたびに、アプリケーションが起動し、データベースをリセットしてだと思うので、これは実際にデバッグ目的のためだけに良いですマッピングツールとランタイム前方マッピングについて
java org.apache.openjpa.jdbc.meta.MappingTool -action buildSchema -foreignKeys true 

詳しい情報はこちら:http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_mapping.html#ref_guide_ddl_examples

あなたの最後のオプションは、単に手動でテーブルを作成することです。ここにOracleのスクリプトがあります。あなたはおそらくかなり簡単にSQL Serverに変換することができます:

CREATE TABLE openjpa_sequence_table (ID tinyint(4) NOT NULL, SEQUENCE_VALUE bigint(20) default NULL, PRIMARY KEY (ID)) 
+1

無効なOracle DDLです。 OracleはTINYINTまたはBIGINTをサポートしておらず、NUMBERのみをサポートしています。 CREATE TABLE openjpa_sequence_table(ID NUMBER(4)NOT NULL、SEQUENCE_VALUE NUMBER(20)デフォルトNULL、PRIMARY KEY(ID)); –

0

私の場合はGenerationType.IDENTITYをにGenerationType.AUTOを変更するには、問題を解決しました。あなたがエンティティを変更できる場合、これは唯一の解決策です。

関連する問題