【问题标题】:CDI Generic DAO injectionCDI 通用 DAO 注入
【发布时间】:2014-10-27 03:08:15
【问题描述】:

我的项目有问题

线程“main”中的异常 org.jboss.weld.exceptions.DeploymentException: WELD-001408: 带有限定符 @Default 的 JpaDAO 类型的依赖关系不满足 在注入点 [BackedAnnotatedField] @Inject private 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;

我做错了什么?

【问题讨论】:

    标签: java generics cdi dao


    【解决方案1】:

    生产者方法的返回类型 (JPaDAO) 不能分配给注入所需的类型 (JpaDAO)。我相信您需要在您的生产者方法中添加一个类型变量。

    【讨论】:

    • 感谢您的回答,这样工作:public JpaDAO createJpaDAO(InjectionPoint point) throws ClassNotFoundException
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2015-07-05
    • 2016-06-08
    • 2016-02-08
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多