我对 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 { ... }
后来我用这个实体构建了一些查询并保存了查询上下文。有了这个上下文,a 可以执行查询。我需要的是一种获得正确实体经理的方法。所以我注入任何 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 不会动态工作(对吗?)
谁能帮我?