1

JBoss 6.0 にデプロイされた J2EE アプリケーションで休止状態を使用しています。私のデータベースは Oracle 11i と Derby です。主キー (シリアル ID を実行) を生成するために、エンティティ (PersonDTO) の 1 つで @TableGenerator アノテーションを使用します。

  @Entity
  @Table(name = "EDIS_PERSON")
  public class PersonDTO {
    @Id
    @TableGenerator(name="TABLE_GEN", 
                       table="EDIS_SEQUENCE", pkColumnName="SEQ_NAME",
                       valueColumnName="SEQ_COUNT", 
                       pkColumnValue="PERSON_ID", allocationSize = 5)
    @GeneratedValue(strategy=GenerationType.TABLE, generator="TABLE_GEN")
    private long id; 
    .
    .
    .

そして、シーケンスに必要なエンティティを定義しました-次のように:

@Entity
@Table(name = "EDIS_SEQUENCE")
public class EdmSequenceDTO {
    @Id
    private String SEQ_NAME;
    private long SEQ_COUNT;
    .
    .
    .

シーケンス生成に関する限り、すべてが正常に機能します。しかし、エンティティの作成中 (J2EE アプリを初めてデプロイするとき)、JBoss server.log ファイルに次のエラーが表示されますが、すべてのエンティティ/テーブルは最終的に正常に作成されます。

14:04:16,817 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] Unsuccessful: create table EDIS_SEQUENCE ( SEQ_NAME varchar(255),  SEQ_COUNT integer ) 
14:04:16,817 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] Table/View 'EDIS_SEQUENCE' already exists in Schema 'EDM'.
14:04:16,818 INFO  [org.hibernate.tool.hbm2ddl.SchemaUpdate] schema update complete**

これは実際には「エラー」ではないと思います。2 つのエンティティ Bean の一部として参照しているためEDIS_SEQUENCE、休止状態が 2 回作成しようとしています。1 つ目は EdmSequenceDTO がデプロイされたとき、2 つ目は PersonDTO がアノテーションEDIS_SEQUENCEの一部として参照するときです。@TableGenerator

私のpersistence.xmlファイルにはhibernate.hbm2ddl.auto、value="update" のプロパティがあります。「create-drop」の代わりにこの値が必要です。

休止状態によって報告されたエラーを回避する方法はありますか?

4

1 に答える 1

2

まだ解決されていない場合は、EDIS_SEQUENCE テーブルをエンティティ クラスにマップしないでください。hibernate によって内部的に使用されます。

于 2011-10-11T14:57:05.293 に答える