0

CDI インスタンスに問題があります。プロジェクトには、複数の JPA EntityManager があります。使用するエンティティ マネージャー修飾子でエンティティに注釈を付けたいと考えています。これは注釈です:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ManagedEntity {
    Class<? extends Annotation> value() default BaseEntityManager.class;
}

私のエンティティには注釈が付けられています:

@Entity
@Table(name="TEST")
@ManagedEntity(StandardEntityManager.class)
public class MyEntity { ... }

後で、このエンティティを使用していくつかのクエリを作成し、クエリ コンテキストを保存するだけです。このコンテキストでクエリを実行できます。私が必要としているのは、適切なエンティティ マネージャーを取得する方法です。だから私は EntityManager インスタンスを注入し、正しいものを選択しようとしました。

@Inject
@Any
private Instance<EntityManager> entityManagers;

...

// Read out the ManagedEntity and check for mixed managers
Class<? extends Annotation> manager = getQueryManager(queryContext); 

...

// Select requires Annotation
EntityManager em = entityManagers.select(... classname to annotation ...).get(); 
// ... QueryContext to query and execute here ...

私の問題は、クラス名から注釈を取得する方法が見つからないことです。新しいインスタンス cdi がそれを受け入れていない場合、AnnotationLiteral の構築は動的に機能しません (訂正しますか?)

誰でも私を助けることができますか?

4

2 に答える 2

0

使用できる 2 つのオプションを認識しています。おそらく、CDI の知識が豊富な人がより良いオプションを提案できるでしょう。

注釈のセットが小さい場合は、この状況で AnnotationLiteral 定義を利用できます。Javadoc に示されているように、別のリテラル クラスを作成し、そのクラスのインスタンスをルックアップ コードに渡します。

  • 利用可能なインスタンスを解析する

使用可能なインスタンスを反復処理し、探しているタイプに一致するインスタンスを見つけます。見つかったら、それをエンティティ操作に使用します。

それが役立つことを願っています。

于 2013-11-15T08:58:51.390 に答える