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に指示するにはどうすればよいですか?
私はついにこれを行う方法を見つけました。
キーは「持続性」ツールウィンドウです。どうやらJPAファセットを追加した後に利用可能になりますが、別のツールウィンドウです。
開くには:メニュー「表示」->ツールウィンドウ->パーシステンス
このウィンドウには、永続性に関連するさまざまな要素を持つアプリケーションが表示されます(persistence.xml
、entityManagerFactory
、Springコンテキストから、およびmyUnit
は、どこから来たのかわかりません。
ここで、任意の要素を右クリックして、「データソースの割り当て」を選択できます。
これにより、左側の列に永続化要素を含む小さなテーブルと、右側の列に割り当てられたデータソースを含むポップアップダイアログが開きます。そこの「データベース」ウィンドウからデータソースを割り当てることができるので、MySQL DBとvoilà用に設定したデータソースを選択しましたが、検証エラーはなくなりました。
しかし、間違ったテーブル名または列名を入力すると、エラーが表示されます。
まず、IDEにデータソースを追加する必要があります。通常は右側の「データベース」タブで実行できます。このデータソースをコードからインポートできます。ボタン更新テーブルをヒットすることを確認する必要があります。 IDEAはテーブルをロードして検証に使用します。JPAファセット内でこのデータソースを設定する必要があります。
必要なことがいくつかあります。最初に、プロジェクト構造構成でHibernateファセットを構成します。この時点でHibernate設定ファイルを選択するか、新しい設定ファイルを作成できます。次に、データベースウィンドウでデータソースを構成する必要があります([表示]、[ツール]ウィンドウ、[データベース])。データベースウィンドウの[コンソール]タブでデータベースの方言を設定することを忘れないでください。最後に、永続ウィンドウに移動し(表示->ツールウィンドウ->永続)、データソースを適切なファセットに追加する必要があります。ツリーの右側のアイコンを右クリックして、「データソースの追加」を選択します。 [データソース]列には、構成したすべてのデータソースを含むドロップダウンメニューがあります。その後、IntelliJはテーブルを正しく識別します。
警告の一言。 v12.04の時点で、IntelliJはHibernate構成ファイルを変更しません。クラスをマップし、データベースの詳細を手動で追加する必要があります。
他の人が言及したようなデータソースの設定に加えて、これらの誤ったエラーをクリアするには、データベースパネルで設定、スキーマとテーブルタブに移動し、「information_schema」テーブルの左側のチェックボックスを押す必要がありますデータベース。
JPAの場合、テーブル/列を解決できません。すべてが機能し、赤いエラーマークに悩まされている場合は、検査設定を[エラー]から[警告]に変更できます。
File --> Settings --> Inspections --> JPA issues --> Unresolved database references in annotations
。
データソースを正しく設定しましたが、列名は表示されませんでした。以下のようにスキーマとカタログを変更した後、すべてが正しく認識されました。
@Entity
@Table(name = "stock_detail", schema = "testing", catalog = "")
public class Xyz {
// ...
インポートしていることを確認してくださいjavax.persistence.Table
およびjavax.persistence.Column
エンティティクラス内。
したがって、各クラスの上部で以下を確認してください。
import javax.persistence.Table;
import javax.persistence.Column;
これにより、適切なJPAアノテーションがクラスにインポートされます。