使用CDI和Hibernate4在自定义ConnectionProvider中注入
在JavaEE7项目中,我需要一个自定义ConnectionProvider,它使用记录的用户ID调用DB函数,并设置为DB会话变量 我的问题是,我不能将我的登录用户注入MyConnectionProvider,但注入所有其他bean——没有问题 这是我的连接提供程序:使用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
@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
是限定符实例