web-dev-qa-db-ja.com

Intellij IDEA:JPA検証用のデータソースを指定する

Intellij IDEAで設定された小さなWebアプリ用のSpringプロジェクトがあります。

永続化レイヤーにHibernateの上にJPAを使用します。データソース(MySQL)は、Springアプリケーションコンテキストで定義されます。

    <!-- Values are configured via the property override -->
    <bean id="myDataSource" class="org.Apache.commons.dbcp.BasicDataSource" >
        <property name="driverClassName" value=""/>
        <property name="url" value=""/>
        <property name="username" value=""/>
        <property name="password" value=""/>
    </bean>

実際の値はプロパティファイルから読み取られ、実行時にプロパティオーバーライドメカニズムを使用してSpringによって注入されます。

そして、データソースは同じアプリケーションコンテキストでエンティティマネージャーファクトリに注入されます。

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
    </bean>

最後に、エンティティマネージャーが注釈を使用してDAOに挿入しました。

/**
 * Shared, thread-safe proxy for the actual transactional EntityManager
 */
@PersistenceContext
private EntityManager em;

Tomcatにビルドしてデプロイすると、すべて正常に機能しますが、IntellijのJPA検証では、データソースの取得先を理解していないようです。

私のエンティティでは、テーブルの名前と列の名前に赤の下線が付いており、検証メッセージは「テーブルを解決できません」または「列を解決できません」です。

@Entity
@Table(name = "domain")
public class Domain extends AbstractAgendaEntity {

この例では、"domain"有効と見なされない部分。

[データベース]ツールウィンドウでデータベースを手動で構成しました。コンソールでテーブルを表示し、SQLクエリを実行できます。

このデータソースを使用してJPAエンティティのテーブル名を解決するようにIntellijに指示するにはどうすればよいですか?

37
Pierre Henry

私はついにこれを行う方法を見つけました。

キーは「持続性」ツールウィンドウです。どうやらJPAファセットを追加した後に利用可能になりますが、別のツールウィンドウです。

開くには:メニュー「表示」->ツールウィンドウ->パーシステンス

このウィンドウには、永続性に関連するさまざまな要素を持つアプリケーションが表示されます(persistence.xmlentityManagerFactory、Springコンテキストから、およびmyUnitは、どこから来たのかわかりません。

ここで、任意の要素を右クリックして、「データソースの割り当て」を選択できます。 enter image description here

これにより、左側の列に永続化要素を含む小さなテーブルと、右側の列に割り当てられたデータソースを含むポップアップダイアログが開きます。そこの「データベース」ウィンドウからデータソースを割り当てることができるので、MySQL DBとvoilà用に設定したデータソースを選択しましたが、検証エラーはなくなりました。

しかし、間違ったテーブル名または列名を入力すると、エラーが表示されます。

109
Pierre Henry

まず、IDEにデータソースを追加する必要があります。通常は右側の「データベース」タブで実行できます。このデータソースをコードからインポートできます。ボタン更新テーブルをヒットすることを確認する必要があります。 IDEAはテーブルをロードして検証に使用します。JPAファセット内でこのデータソースを設定する必要があります。

12
chalimartines

必要なことがいくつかあります。最初に、プロジェクト構造構成でHibernateファセットを構成します。この時点でHibernate設定ファイルを選択するか、新しい設定ファイルを作成できます。次に、データベースウィンドウでデータソースを構成する必要があります([表示]、[ツール]ウィンドウ、[データベース])。データベースウィンドウの[コンソール]タブでデータベースの方言を設定することを忘れないでください。最後に、永続ウィンドウに移動し(表示->ツールウィンドウ->永続)、データソースを適切なファセットに追加する必要があります。ツリーの右側のアイコンを右クリックして、「データソースの追加」を選択します。 [データソース]列には、構成したすべてのデータソースを含むドロップダウンメニューがあります。その後、IntelliJはテーブルを正しく識別します。

警告の一言。 v12.04の時点で、IntelliJはHibernate構成ファイルを変更しません。クラスをマップし、データベースの詳細を手動で追加する必要があります。

5
David Weber

他の人が言及したようなデータソースの設定に加えて、これらの誤ったエラーをクリアするには、データベースパネルで設定、スキーマとテーブルタブに移動し、「information_schema」テーブルの左側のチェックボックスを押す必要がありますデータベース。

1
Amalgovinus

JPAの場合、テーブル/列を解決できません。すべてが機能し、赤いエラーマークに悩まされている場合は、検査設定を[エラー]から[警告]に変更できます。

File --> Settings --> Inspections --> JPA issues --> Unresolved database references in annotations

0
justMe

データソースを正しく設定しましたが、列名は表示されませんでした。以下のようにスキーマとカタログを変更した後、すべてが正しく認識されました。

@Entity
@Table(name = "stock_detail", schema = "testing", catalog = "")
public class Xyz { 
    // ...
0
Martin Pfeffer

インポートしていることを確認してくださいjavax.persistence.Tableおよびjavax.persistence.Columnエンティティクラス内。

したがって、各クラスの上部で以下を確認してください。

import javax.persistence.Table;
import javax.persistence.Column;

これにより、適切なJPAアノテーションがクラスにインポートされます。

0
Kevin Bowersox