2009-09-03 17 views
4

JPJAで複数のPOJOに注釈を付けたので、JPAはそれらを使用してHibernateでテーブルを作成できます。それは、 "Revision"と呼ばれる1つの非常に中央のテーブルを除いて、すべてのテーブルが作成されているようです。リビジョンクラスには@Entity(name="RevisionT")注釈が付いていますので、RevisionTにリネームされるので、MySQLの予約語(ターゲットデータベース)と競合しません。テーブルがHibernateで作成されていない

データベース全体を削除して再作成し、基本的にJPAセッションを開いて閉じます。すべてのテーブルは問題なく再現されているようです。

作成されたスキーマに1つのテーブルが存在しないのはなぜですか? Hibernateがどのようなエラーを生成しているかを見るために、どのような計測器を使うことができますか?

ありがとうございました。

更新:Derby DBとして作成しようとしましたが、成功しました。ただし、フィールドの1つに「索引」という名前があります。私は@org.hibernate.annotations.IndexColumnを使用して、予約語以外の名前を指定します。ただし、列は作成時に常に「索引」と呼ばれます。

ここに疑わしい注釈のサンプルがあります。代わりにフィールドとしてMasterTop.Cx3tHApeを作成する


    @ManyToOne 
    @JoinColumn(name="MasterTopID") 
    @IndexColumn(name="Cx3tHApe") 
    protected MasterTop masterTop; 

、それはMasterTop.Indexを作成します。なぜ名前は無視されますか?

答えて

5

回答は、あなたがorg.hibernate.tool.hbm2ddl.SchemaExportあなたのテーブルを生成することができます

(何計装Hibernateが生産しているエラー?されるかを確認するために使用することができます)。

AnnotationConfiguration conf = (new AnnotationConfiguration()).configure(); 
new SchemaExport(conf).create(showHql, run); 

最初の引数は、あなたは、このコマンドは(CREATE TABLE Sなど)を生成したHQL確認することができます。 2つ目は、実際に修正を加えるべきかどうかです(つまり、false = dry-run)。

したがって、(true, false)でそれを実行すると、何も変更せずにHibernateがテーブルに対して行うことを正確に表示します。これは誰にも役立ちます場合

+0

非常に助けになりました!さらに、調査では、スキーマの@OneToMany側にも@IndexColumn(name = "Index")があったことが示されていますが、Hibernateは@ManyToOneの@IndexColumnを無視しています。 Hibernateからの出力。ああ、それは動作します。 – User1

+1

母、私は助けてうれしいです:) –

2

name attribute@Entityは、この目的で使用するものではありません。代わりに@Table注釈を使用してください:

@Entity 
@Table(name="RevisionT") 
public class Revision { 
+0

あなたは私にそれを打つ:P –

+0

良いアイデア。それは助けになりませんでした。 : – User1

0

はおそらく、あなたは間違って注釈を使用しています。いったん私は偶然、@javax.persistence.Entityの代わりに@org.hibernate.annotations.Entityというエンティティに注釈を付け、Hibernateはこれをスキップしました。あなたの側の質問に

+0

@ javax.persistence.Entityを使用していますが、org.hibernate.annotations.IndexColumnがあります。混合注釈で問題が発生する可能性がありますか? – User1

+0

いいえ、間違いなく。 –

5

、これは今日私に起こった、それは私が私のエンティティ定義に予約語を使用していたが判明:

@OneToMany(mappedBy="list") 
@OrderColumn(name="order") 
private List<Wish> wishes; 

「順序」この場合、ちょうどこの飛ばしHibernateはクラス。だからあなたのユーザー定義の名前を確認してください! :)

乾杯、 マーク

+0

ありがとうあなたは私の時間を救った:) – Smrita

1

これは、列名が原因である私がして、同じ問題に直面していた.....列の名前を変更してみてください.....あなたの基盤となるデータベースSQL予約語と一致しますそれが動作した名前を変更します。

1

私にとっては、columnDefinitionの構文ミスです。デバッグログで簡単に検出できます。

0

hibernate.show_sql設定プロパティをtrueに設定し、Hibernateがcreate tableコードを生成したかどうかを確認します。その場合は、create文をデータベースクライアント(uiまたはコマンドライン)にコピーし、データベースがエラーを返すかどうかを確認します。

私にとって、エラーは私がそうするまで明らかではありませんでした。

予約されたMySQLの単語であるフィールド名 'condition'を使用しました。 フィールド名を確認してください...

関連する問題