3

クライアントからメソッドパラメータを渡すセッションBeanメソッドを呼び出すときに問題が発生します

アプリケーションでは、データがメソッド呼び出しに到達すると、常にnullになるか、デフォルト値に設定されます。

メソッドのプロセスはオブジェクトでうまく機能しますが

例えば:

-オブジェクトエンティティaddStudent(Student student);を永続化するメソッドがあります。-クライアントから、メソッドaddStudent(ourStudent);を呼び出して、学生名などの学生フィールドを設定する学生オブジェクトを作成します。このourStudentは、nullまたはデフォルト値のフィールドを持つメソッドに到達します。学生にはこれらの空のフィールドが追加されます。

前もって感謝します。

4

1 に答える 1

6

ウィービングでEclipseLinkを使用していますが、機能しません。織らずに試してみてください。persistence.xmlおそらくあなたの編集によって

<persistence-unit name="XXX" transaction-type="XXX">
    <jta-data-source>XXX</jta-data-source>
    <jar-file>Or List of Classes or something else</jar-file>
    <properties>
      [other properties]
      <property name="eclipselink.weaving" value="false"/>
    </properties>
  </persistence-unit>

更新: JPA 実装がエンティティを処理できるいくつかの代替方法があります。これは完全なリストではありません。

  • 拡張機能 (これは、JPA 仕様がエンティティに非公開のデフォルト コンストラクターを必要としない方法です)
  • ラッピング
  • クラスのバイト・コード操作(EclipseLinkが「望んでいる」方法に準拠させるため)
  • ThreadLocal プロキシのこと
  • プロパティを使用した基本的な反射
  • ゲッター セッターを使用した基本的なリフレクション (存在する場合)

EclipseLink は、バイト コード インジェクションを「ウィービング」と呼びます ( Java バイトコード インジェクションとは? ) 動的ウィービングは、「実行時」にウィービングを行います。基本的には、クラスがクラス ローダーによってロードされるときです。静的ウィービングは、デプロイ前にウィービングを行いますが、コンパイル後に行います。EclipseLink のウィービングは、パフォーマンスに関して最速の方法であり、他の理由からも推奨される方法です。残念ながら、織りを機能させるのは少し難しいことがよくあります。プロジェクトにとって重要でないことは十分にあり得ますが、多くの典型的なプロジェクトでは重要ではありません。

リモート インターフェイス経由で Bean にアクセスするクライアントがあり、その接続を介して引数または戻り値として渡されるエンティティがある場合、動的ウィービングは機能しません。ほとんどの生産シナリオでは、特にアプリ/製品が非常に小さくない場合、とにかく動的ウィービングよりも静的ウィービングが優先されます...静的ウィービングと動的ウィービングの詳細とその構成方法を読むには、優れた情報源を実際に見つけていません.しかし、これは少なくとも半公式です: Using_EclipseLink_JPA_Weaving

あなたに起こったことは、エンティティが一方の端で織り込まれ、もう一方の端で織り込まれていないということでした -> 絶対に機能しません。

良いニュースは、おそらくこの織物のことをまったく気にする必要がないということです。ウィービングを無効にすると、EclipseLink は JPA エンティティを処理する別の方法に戻りました。ウィービングが有効な場合にのみEclipseLinkがサポートする関数がいくつかあります(ただし、JPAは必要ありません)。

From: What_You_May_Need_to_Know_About_Weaving_JPA_Entitiesから 、EclipseLink がウィービングを明示的に使用するもののリストが表示されます。

  • 遅延読み込み (間接)
  • 変更追跡
  • グループを取得する
  • 内部最適化

(ウィービングが無効になっている場合、それらのいくつかについては、他の方法へのフォールバックがあります。「内部最適化」以外のすべてを推測します)

于 2012-06-05T10:18:57.553 に答える