8

私は Java EE/EJB 初心者ですが、収集したドキュメントやその他の投稿から、エンティティの検証中に同じエンティティ マネージャー/セッションを使用してデータベースをクエリすることはできません。

一般に、ポータブル アプリケーションのライフサイクル メソッドは、EntityManager またはクエリ操作を呼び出したり、他のエンティティ インスタンスにアクセスしたり、同じ永続化コンテキスト内で関係を変更したりしてはなりません。[43] ライフサイクル コールバック メソッドは、呼び出されたエンティティの非関係状態を変更する場合があります。

翻訳をお願いします?

これはかなり抽象的です...もっと具体的な言葉で説明できますか?それは答えよりも多くの質問につながります。たとえば、エンティティに遅延ロードされたコレクションがある場合、検証中にアクセスできますか? コレクションは「別のエンティティ」であり、ドキュメントに違反していると思われる DB クエリが必要になります。

この「ライフサイクル要件」は奇妙に思えます。なぜなら、特定の検証でデータベースへのクエリが実際に必要になるのは現実だからです。

他の投稿から、entitymanagerfactory.

これは、EntityManagers と Hibernate Validation の使用に関する 2 つの質問につながります。

  1. 検証中にデータベースにクエリを実行する必要があるため、何らかの設計上の欠陥があるか、Hibernate Validation を誤用している可能性はありますか?
  2. JBoss で Java EE を使用している場合、バリデーターに EntityManagerFactory を挿入するにはどうすればよいですか?

私はこのようなことを試しました:

@Stateless
public class UserValidator implements ConstraintValidator<ValidUser, User> {
    @PersistenceUnit(unitName="blahblah")
    EntityManagerFactory emf;

    ...
}

しかし、EMF が注入されることはありません。Hibernate Validator が機能するために必要な ConstraintValidator インターフェイスを実装しているため、@Stateless タグは無関係になると思います。

Validator から EntityManagerFactory を取得するための一般的なパターンは何ですか?

ありがとう!

4

3 に答える 3