web-dev-qa-db-ja.com

EclipseでのJPAプロジェクトの問題-@ Entityアノテーションが付けられたクラスのエラー:テーブル "xxx"を解決できません

Eclipse(Indigo)で単純なEJB + JPAプロジェクトを作成しようとしています。新しいEJBプロジェクトを作成しました。

  • ターゲット:既存のGlassfishサーバー
  • 構成:EJBモジュール+ GlassFishデプロイメント記述子ファイル+ Java + JPAウィンドウ内JPAファセットpostgresdbへの接続を宣言します(pingが成功しました)

エンティティを定義しようとすると問題が発生します。テーブル「従業員」を解決できません。指定された名前パラメーターで@Tableアノテーションを追加しましたが、これは機能しませんでした。私のpersistence.xmlファイル:

    <persistence-unit name="pu_name">
    <jta-data-source>jdbc/baza1Postgres</jta-data-source>
</persistence-unit>

Glassfishで、「jdbc/baza1Postgres」という名前のJDBCリソースを定義しました。
テーブルが存在するかどうかを「Eclipseはどのように知る」のですか?他に何を設定する必要がありますか?

10
Adam Szecowka

「テーブルxxxを解決できません」エラーに対するこの解決策が見つかりました:

Eclipseで、[ウィンドウ]-> [設定]-> [検証]、[JPAバリデーター]に移動し、ビルドをオフにします。

それに合わせて新しいデータベーススキーマと一緒にアプリを開発している場合もありますが、次のようになります。

テーブル「XXXX」のスキーマ「null」は解決できません。

とにかく、これはおそらくデフォルトでオンにすべきではありません。人々は、古いデータベースに合うように新しいアプリを構築するよりも、最初から新しいアプリを構築する可能性が高く、古いデータベースから構築する場合でも、EclipseのJPAツールにはテーブルからのエンティティの構築機能があります。」

36
maxmcbyte

Eclipseでは、それを幸せにするために、JPAツールを使用してテーブルを作成する必要がありました。

[プロジェクト]> [JPAツール]> [エンティティからテーブルを生成]を右クリックします

検証をオフにすることもできると思いますが、テーブルを作成する方が理にかなっているようです。

6
bobtheowl2

私はEclipseを使用しています。 JPA環境で「データソースエクスプローラー」ウィンドウを使用しているときにEclipseがテーブルを認識することに注意しました(おそらくコンパイルする必要はありませんが、同じEclipse IDEでデータベースをチェックするのに役立ちます)。次に、そのウィンドウでデータベースへの接続を作成すると、接続プロパティに問題変更データが表示されました。

NOt Working(テーブルを解決できません):

Database: my_database
URL: jdbc:mysql://localhost:3306
User Name: jpa_user
Password: jpa_pass

修正済み(URLフィールドにデータベースを追加):

Database: my_database
URL: jdbc:mysql://localhost:3306/my_database
User Name: jpa_user
Password: jpa_pass

データベースでテーブルが大文字でない場合は、エンティティで@Table(name = "")を使用することを忘れないでください。

4
molavec

エンティティを検索する場所をpersistence.xmlファイルで指定する必要があります。 Java EE 6チュートリアル を参照してください。ここからの例を次に示します。

永続性ユニット

永続性ユニットは、アプリケーションのEntityManagerインスタンスによって管理されるすべてのエンティティクラスのセットを定義します。このエンティティクラスのセットは、単一のデータストアに含まれるデータを表します。

永続性ユニットは、persistence.xml構成ファイルによって定義されます。以下は、persistence.xmlファイルの例です。

 <persistence>
   <persistence-unit name="OrderManagement">
      <description>This unit manages orders and customers.
            It does not rely on any vendor-specific features and can
            therefore be deployed to any persistence provider.
      </description>
      <jta-data-source>jdbc/MyOrderDB</jta-data-source>
      <jar-file>MyOrderApp.jar</jar-file>
      <class>com.widgets.Order</class>
      <class>com.widgets.Customer</class>
  </persistence-unit>
</persistence> 

このファイルは、JTA対応のデータソースjdbc/MyOrderDBを使用するOrderManagementという名前の永続ユニットを定義します。 jar-file要素とclass要素は、管理された永続性クラス(エンティティー・クラス、埋め込み可能クラス、およびマップされたスーパークラス)を指定します。 jar-file要素は、管理された永続性クラスを含むパッケージ化された永続性ユニットに表示されるJARファイルを指定しますが、class要素は管理された永続性クラスに明示的に名前を付けます。

また、これを見てください stackoverflowの質問 休止状態を使用して、エンティティアノテーションを持つクラスをスキャンできます

3
Ross

私はこのエラーが発生し、非常に曲がりくねった努力でそれを機能させることができました。私はPostgreSQLを使用しています。

まず、上記のように実行し、ビルドの検証をオフにしました。次に、検証を手動で実行して接続しました。私のステップは本質的にこれでした:

1:データソースエクスプローラーを介してデータベースに接続します。接続が正しい状態にあることを確認して、テーブルに移動して更新を押します。接続で更新を押しても、テーブルは更新されませんでした。

2:おそらくオプションですが、JPAツールを使用してスキーマをデータベースにエクスポートしました。ここでも、手順1と同様に更新を押します。

3:エンティティとテーブルの両方でエンティティに注釈を付けます。エンティティに名前を追加し、テーブル注釈にNAME、CATALOG、およびSCHEMAを追加します。

@Entity(name="DBAssembly")
@Table(name="DBAssembly",catalog="lag",schema="public")

4:検証を手動で実行します。カタログの追加は重要でした。とてもうるさいです。

1
K.Nicholas

それは動作しますが、maxmcbyte(Thanks !!)の回答に加えて、このソリューションを一部のプロジェクトにのみ適用する方がよい場合もあります。個別に実行してください。アクセスすることにより:プロジェクトのプロパティ>検証>オンオン「有効なプロジェクト固有の設定」そしてoffJPA Validation in theBuild Column。画像を見る...

Config

0
cristianchiess

Maxmcbyteの答えを使用する別のオプションは、特定のプロジェクトに対してのみ設定することです。プロジェクトを右クリックして、「検証」を選択します。プロジェクト固有の設定を有効にし、JPA Validator forBuildを無効にします。

0
AngryMonkey