10

GWT 1.5.3 を使用してデータベース アプリケーションを構築しようとしています。オブジェクトで JPA アノテーションを使用します。ホスト モードでは、GWT の RPC が正常に動作しているようです。しかし、GWT コンパイラを使用してアプリをコンパイルしようとすると、「インポート javax.persistence を解決できません」、「エンティティをタイプに解決できません」などのエラーが表示されます。toplink-essentials.jar は既にプロジェクト パスに含まれています。この問題を解決するには、他にどのような設定が必要ですか?

4

7 に答える 7

9

Gilead ( http://sourceforge.net/projects/gilead/ ) ライブラリを使用して、GWT で JPA エンティティをシームレスに管理できます。

よろしく

于 2009-04-07T19:39:20.333 に答える
6

GWT プロジェクトのビルド パスに JPA アノテーションのソース コードを含める必要があります。詳細については、こちらを参照してください。

http://code.google.com/p/google-web-toolkit/issues/detail?id=1830&can=1&q=jpa

具体的には、問題を解決するこのjarファイル:

http://google-web-toolkit.googlecode.com/issues/attachment?aid=1475633892125294312&name=jpa-annotations-source.jar

于 2009-04-01T04:13:47.960 に答える
2

JPA と GWT の一般的な問題は、GWT 自体が高度な JPA クラスをサポートしていないため、Java.io.Serializable を実装し、単純な JPA リソース アノテーションを持つ単純な POJO 永続エンティティ DTO を実行するだけです。GWT クライアントのスコープでエンティティ クラスを作成する必要があります。それを yourproject.client パッケージの下に置くか、

ソースパス="クライアント"

source path="folderOfYourEntities"

GWT プロジェクトの YouProject.gwt.xml ファイル内。これにより、エンティティ オブジェクトが GWT クライアントに含まれ、RPC のクライアント側でも使用できるようになります。DAO はサーバー側にある必要があり、コンテナーがサポートするすべてのものを含めることができます。

あなたが今抱えている問題は、コンパイル時にGWTコンパイラが、エンティティDTOクラスにあるJPAアノテーションのインポートが何であるかがわからないと言ったことです。そのため、javax.persistence クラスとソース コードが必要です。Rustmyself による jpa-annotation-source.jar 参照が機能します。これは、javax.persistence でコンパイルされたクラス ファイルとソース コード ファイルに Persistence.gwt.xml を加えたものです。これは、javax.persistence パッケージ用のシンプルな GWT モジュールです。独自の GWT モジュールを作成する方法を知っている場合は、これらすべてを機能させるのに問題があるはずです。ちなみに、Java EE の公式ソースは、glassfish 開発サイトのビルド セクション wiki.glassfish.java.net にあります。

プロキシを使用して自動的にファンシー PU エンティティを単純なオブジェクトにラップしたり、実行時にそれらを遅延ロードしたりするソリューションは他にもたくさんあります。それらは機能しますが、最適なソリューションではありません。ベスト プラクティスは、GWT クライアント コンテキストに POJO JPA DTO エンティティを配置し、サーバーに本格的な DAO を配置することで、最初から物事をシンプルかつ堅牢にすることです。

GWTPersistence
の例 GWT と JPA をシームレスに動作させる方法について、実際に動作する例を追加しました。これは、ソース コードと配置ファイルを含む NetBean プロジェクトです。NingZhang.info の GWTPersistence を参照してください。

于 2009-10-23T16:14:54.397 に答える
1

私はJPA <--> GWTデータ変換などにも取り組んでいます。

DTO レイヤーを排除するために、Gilead も使用しました。

ここでの私の反論は、javax.persistence の翻訳に関するものです。これを避けるために、XML JPA マッピング宣言 (orm.xml) を使用しました。

于 2009-06-05T22:38:48.187 に答える
1

簡単に言えば、エンティティの別のバージョンを保持しますが、注釈は付けません!

于 2010-12-27T01:32:09.823 に答える
1

わかりました、私は欠けていたものを見つけました。myapp-compile.cmd スクリプト (または ant ビルド ファイル) の GWT コンパイラ パスに jpa-annotations-source.jar を含める必要がありました。ところで、この jpa-annotations-source.jar ファイルの出所を誰か教えてもらえますか?

于 2009-04-01T07:08:48.463 に答える
-1

synergetic のコメントに反発して、(GWT 1.5 から) 追加するだけで済みます

<source path='javax.persistence'/>

Module.gwt.xml に

于 2013-02-06T15:50:36.157 に答える