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

使用CDI和Hibernate4在自定义ConnectionProvider中注入,hibernate,cdi,weld,Hibernate,Cdi,Weld,在JavaEE7项目中,我需要一个自定义ConnectionProvider,它使用记录的用户ID调用DB函数,并设置为DB会话变量 我的问题是,我不能将我的登录用户注入MyConnectionProvider,但注入所有其他bean——没有问题 这是我的连接提供程序: @SessionScoped @Named public class MyConnectionProvider implements ConnectionProvider, Configurable, Serializable

在JavaEE7项目中,我需要一个自定义ConnectionProvider,它使用记录的用户ID调用DB函数,并设置为DB会话变量

我的问题是,我不能将我的登录用户注入MyConnectionProvider,但注入所有其他bean——没有问题

这是我的连接提供程序:

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

@Inject
private Logger log;

@Inject @LoggedIn
private User currentUser = null;
下面是类登录,其中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不提供这些类的任何注入支持。它们是直接实例化的,并且始终是持久化单元中的一个单例

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