質問

私は、Geronimoアプリケーション・サーバー上に、下にOpenJPAの実装とJPAを使用しています。私はまた、MySQLデータベースを使用しています。私は、NULL可能日付プロパティを持つオブジェクトを更新するとの問題を抱えています。私はnullに設定日付プロパティを持つエンティティをマージしようとしているときに、何のSQL更新スクリプトは生成されません(または他のフィールドが変更された場合、SQL更新スクリプトが生成されますが、日付フィールドは、それからommitedされます)。日付フィールドは、他のいくつかのNOT NULL値に設定されている場合は、更新スクリプトが正しく生成されます。

誰もがそのような問題を持っていましたか。

役に立ちましたか?

解決

OpenJPAのは、あなたが取り外されてきたときに、特定の仮定を行う(そしておそらくシリアル化された)エンティティと、その後に戻ってそれをマージします。

これは、通常、この種の問題でキック連載だ - エンティティがシリアル化されるとき、OpenJPAがロードされたフィールドを追跡するそののStateManagerを失います。あなたがNULL値のOpenJPAで戻ってエンティティをマージ結果フィールドがこれまでにロードされたことは確かではありません、それが変更されていないと考えています。

この問題を解決するためのオプションがいくつかあります:

あなたは、シリアライズのStateManagerを使用するようにOpenJPAのを設定することができます - そしてそれはあなたがロードされてきたフィールドをを追跡します。これを行うには、persistence.xmlのに次のプロパティを追加します。

<property name="openjpa.DetachState" value="loaded(DetachedStateField=true)"/>

またはエンティティが切り離される前に、フィールドのセットをロードするようにOpenJPAのを教えてください。 OpenJPAのは、フィールドが存在していた知っているだろうし、適切にnull値を処理します。 (これは高価なことができます)あなたのオプションは、フェッチ・グループをロードするようにしている(OpenJPAのコンセプトが、デフォルトでは、すべての非LAZYフィールドをロード)、またはすべてのフィールド。

私はほとんどの場合、フェッチ・グループをお勧めします、ここでのpersistence.xmlのプロパティです。

<property name="openjpa.DetachState" value="fetch-groups"/>
あなたがその気なら、

あなたは分離オブジェクトのグラフでいくつかの巧妙なことを行うことができます。 OpenJPAのマニュアルは<のhref = "http://openjpa.apache.org/builds/1.2.2/apache-openjpa-1.2.2/docs/manual/manual.html#ref_guide_detach_graph" のrel = "noreferrerでより多くの情報を持っています「> http://openjpa.apache.org/builds/1.2.2/apache-openjpa-1.2.2/docs/manual/manual.html#ref_guide_detach_graph の

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top