使用 CDI 和 Hibernate4 在自定义 ConnectionProvider 中注入

Injection in custom ConnectionProvider with CDI and Hibernate4

在 Java EE 7 项目中,我需要一个自定义的 ConnectionProvider,它使用记录的 UserId 调用 DB-Function,并设置为 DB-Session 变量。

我的问题,我无法在 MyConnectionProvider 中注入我登录的用户,但在所有其他 Bean 中都没有问题。

这是我的 ConnectionProvider:

@SessionScoped
@Named
public class MyConnectionProvider implements ConnectionProvider, Configurable, Serializable {

@Inject
private Logger log;

@Inject @LoggedIn
private User currentUser = null;

这里是 class Login currentUser 初始化的位置:

@SessionScoped
@Named
public class Login implements Serializable
{

@Inject
private Credentials credentials;

@PersistenceContext
private EntityManager userDatabase;

private User currentUser;

//.....................................

@Produces
@LoggedIn
@Named
@SessionScoped
public User getCurrentUser()
{
  return currentUser;
}

和登录界面:

@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, PARAMETER,  METHOD, FIELD})
@Qualifier
public @interface LoggedIn {}

可能有人遇到同样的问题吗?

Hibernate 不为这些 classes 提供任何注入支持。它们是直接实例化的,并且始终是您的持久性单元中的单例。

您仍然可以获得这种功能,只需使用 CDI 实用程序 class 查找您的参考资料。 CDI.current().select(User.class, new LoggedInLiteral()).get() 其中 User.class 是您期望的类型的 class,LoggedInLiteral 是限定符实例。