2011-12-20 8 views
2

GlassFish 3.1.1(JSF 2、JPA 2、EclipseLink、Bean Validation)を使用しています。挿入/更新が選択されていても、バイパス検証が行われない

私は、これらの注釈で@Past,@Futureおよび@NotNullのBean検証APIで検証を実装しようとしています。

挿入や更新中に正常に動作します。私は、このプロパティjavax.persistence.ValidationModeしかしとJPAの検証を無効にすることができスペックで見た

[#|2011-12-20T10:18:30.286+0100|WARNING|glassfish3.1.1|javax.enterprise.resource.jta.com.sun.enterprise.transaction|_ThreadID=36;_ThreadName=Thread-2;|DTX5014: Caught exception in beforeCompletion() callback: 
javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'preUpdate'. Please refer to embedded ConstraintViolations for details. 
    at org.eclipse.persistence.internal.jpa.metadata.listeners.BeanValidationListener.validateOnCallbackEvent(BeanValidationListener.java:90) 
    at org.eclipse.persistence.internal.jpa.metadata.listeners.BeanValidationListener.preUpdate(BeanValidationListener.java:72) 

がどのように選択時の検証を無効にする:私はいくつかの不正な値を持つエンティティエン選択しようとすると、残念ながら、私はこの例外を持っています挿入または更新中には使用しないでください

ご協力いただきありがとうございます。

答えて

2

問題は、永続コンテキスト内のすべてのものが検証されることです。

オブジェクトを永続コンテキストに追加すること、トランザクション外の別のEntityManagerでオブジェクトを読み取ること、またはそれらを読み取るクエリに「eclipselink.read-only」ヒントを使用することを避けることができます。

変更のないオブジェクトは検証されていますが、奇妙に思えます。この場合、おそらくバグを記録するでしょう。

1

いくつかのコメント。 最初に、検証モード(javax.persistence.validation.mode)は、検証モード、自動、コールバックまたはnoneのみを決定します。

  • javax.persistence.validation.group.pre-持続
  • javax.persistence.validation.group.pre更新
  • :プロパティがされた後、あなたは何

    javax.persistence.validation.group.pre-remove

を使用して、それぞれのメインコールバックを定義することができます。これらのどれも選択に関連していません。

あなたのエラーを見ても、のアップデート前のアップデートは失敗したようです。どのように正確にこのエラーが発生しますか?

+0

EclipseLinkはselectでpreUpdateを呼び出しています。バグです。https://www.eclipse.org/forums/index.php/t/489191/ –

0

私のアプリケーションでの日付と同様の問題があります。私はトランザクションエンティティとタームエンティティが関連付けられており、のトランザクションが古い場合は、履歴トランザクションに移動しています。だから私はその古いの用語(期間)をデータベースに保存し、新しい日付の新しいの作成を防止したいと思います。したがっての用語は自然に古くなり、過去にユーザーが作成したものではありません。私は、@Futureの開始日/終了日に正しく使用するかどうかを検討します。

これは私が用語が古くなると、その後取引の歴史トランザクションを移動するのを待つ必要があるとして、開発中のアプリでそれをテストすることは困難です。

関連する問題