50

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 クエリを実行できます。

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

4

9 に答える 9

136

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

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

それを開くには:メニュー「表示」->ツールウィンドウ->永続性

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

ここで、任意の要素を右クリックして、[データ ソースの割り当て] を選択できます。 ここに画像の説明を入力

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

しかし、間違ったテーブル名または列名を入力すると、やはりエラーが発生します。

于 2013-01-16T12:32:13.893 に答える
15

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

于 2013-01-16T11:10:40.030 に答える
6

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

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

于 2013-03-08T06:41:38.840 に答える
0

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

したがって、各クラスの上部で次を確認します。

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

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

于 2013-01-16T10:26:56.717 に答える