简体   繁体   English

CDI通用DAO注射

[英]CDI Generic DAO injection

I'm having problems with my project 我的项目有问题

Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type JpaDAO with qualifiers @Default at injection point [BackedAnnotatedField] @Inject private teste.view.Principal.dao 线程“主”中的异常org.jboss.weld.exceptions.DeploymentException:WELD-001408:在注入点[BackedAnnotatedField]中带有限定符@Default的JpaDAO类型的依赖关系未满足@Inject私有teste.view.Principal.dao

JpaDAO(Just for test, not fully implemented) : JpaDAO(仅供测试,尚未完全实现):

package teste.cdihibernate;

import java.util.List;
import javax.persistence.EntityManager;

public class JpaDAO<T> implements DAO<T>
{
    private EntityManager em;
    private final Class<T> classe;

    public JpaDAO(Class<T> classe, EntityManager em)
    {
        this.classe = classe;
        this.em = em;
    }

    @Override
    public void save(T entity)
    {
        em.persist(entity);
    }

    @Override
    public void update(T entity)
    {

    }

    @Override
    public void remove(T entity)
    {
        em.remove(entity);
    }

    @Override
    public T getById(Class<T> classe, Long pk)
    {
        return em.find(classe, pk);
    }

    @Override
    public List<T> getAll(Class<T> classe)
    {
        List<T> resultList = (List<T>) em.createQuery("select e from " + classe.getSimpleName() + " e").getResultList();
        return resultList;
    }

    @Override
    public T getByRestriction(Class<T> classe, String attribute, String filter)
    {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}

My DAOFactory : 我的DAOFactory

public class DAOFactory
{
    @Inject private EntityManager em;

    @SuppressWarnings({ "rawtypes", "unchecked" })    
    @Produces
    @Dependent
    public JpaDAO createJpaDAO(InjectionPoint point) throws ClassNotFoundException
    {
        ParameterizedType type = (ParameterizedType) point.getType();
        Class classe = (Class) type.getActualTypeArguments()[0];
        return new JpaDAO(classe, em);
    }
}

And my Principal.java : 还有我的Principal.java

@Inject private JpaDAO<Veiculo> dao;

What am I doing wrong? 我究竟做错了什么?

The producer method's return type (JPaDAO) is not assignable to the required type for injection (JpaDAO<Veiculo>). 生产者方法的返回类型(JPaDAO)无法分配给所需的进样类型(JpaDAO <Veiculo>)。 I believe you need to add a type variable to your producer method. 我相信您需要在生产者方法中添加类型变量。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM