我的项目有问题


线程“主”中的异常org.jboss.weld.exceptions.DeploymentException:WELD-001408:具有限定符@Default的JpaDAO类型的依赖关系未得到满足
在注入点[BackedAnnotatedField] @注入私有teste.view.Principal.dao


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.
    }

}


我的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);
    }
}


还有我的Principal.java

@Inject private JpaDAO<Veiculo> dao;


我究竟做错了什么?

最佳答案

生产者方法的返回类型(JPaDAO)无法分配给所需的进样类型(JpaDAO )。我相信您需要在生产者方法中添加类型变量。

10-08 00:54